【问题标题】:Looking to split a string on the last space and a hyphen that comes after it希望在最后一个空格和后面的连字符上拆分一个字符串
【发布时间】:2015-10-31 17:37:18
【问题描述】:

我希望将一个字段分成三个字段:一个是城市,两个是两个不同的数字。数据看起来像这样:

"Mt. Fuji 8-12"
"Taj Majal 10-03"    
"Ur"    
"Nairobi 04"

我想将该字段拆分如下(| 表示字段之间的分隔):

"Mt. Fuji"  | 8    | 12
"Taj Majal" | 10   | 03
"Ur"        | ""   | ""
"Nairobi"   | "04" | ""

由于这是在 R 中完成的,我也可以接受 Perl 正则表达式。

【问题讨论】:

    标签: regex r


    【解决方案1】:

    你可以这样做,

    > x <- "Mt. Fuji 8-12"
    > strsplit(x, "[\\s-](?=\\d)", perl=TRUE)
    [[1]]
    [1] "Mt. Fuji" "8"        "12" 
    

    [\\s-] 仅在 (?=\\d) 后跟数字字符时匹配空格字符或连字符。 (?=\\d) 肯定前瞻断言断言匹配即[\s-] 必须后跟一个数字字符。

    正如@richard 建议的那样……

    stringi::stri_split_regex(x, "[\\s-](?=\\d)", simplify = TRUE)
    

    【讨论】:

    • 你能解释一下你的正则表达式吗...?
    • 问题是当我这样做时,它会在生成的拆分字符串中保留连字符和空格。我想在分裂时剪掉它们。
    • 好的,所以它适用于那个 x,但如果我在数据框的一列上这样做,它会出于某种原因保持拆分。我正在使用这个命令: sapply(as.character(test), strsplit, "[\\s-](?=\\d)", perl=TRUE)
    • 谢谢理查德!这正是我所需要的。你能把它放在自己的评论中,以便我将其标记为正确吗?
    • 好吧。我不确定什么是适当的礼仪。我只是 Avinash 的答案是正确的吗?
    猜你喜欢
    • 1970-01-01
    • 2015-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多