在每个逗号后查找第二个空格

时间:2019-10-25 14:51:16

标签: r regex strsplit

这是此问题的后续解答:Concatenate previous and latter words to a word that match a condition in R

我正在寻找一个正则表达式,用于在逗号后的第二个空格处拆分字符串。看下面的例子:

vector <- c("Paulsen", "Kehr,", "Diego", 
            "Schalper", "Sepúlveda,", "Alejandro",
             "Von Housen", "Kush,", "Terry")

X <- paste(vector, collapse = " ")
X

## this is the string I am looking to split:
"Paulsen Kehr, Diego Schalper Sepúlveda, Diego Von Housen Kush, Terry"

每个逗号后的第二个空格是我的的标准。因此,我的输出将是:

"Paulsen Kehr, Diego"
"Schalper Sepúlveda, Alejandro"
"Von Housen Kush, Terry"

我想出了一个模式,但是它不能正常工作。

[^ ]+ [^ ]+, [^ ]+( )

strsplit一起使用会删除所有单词,而不是仅在第1组(即[^ ]+ [^ ]+, [^ ]+(group-1))处拆分。我认为我只需要排除完全匹配项,然后再与空格匹配即可。 - regex demo

strsplit(X, "[^ ]+ [^ ]+, [^ ]+( )")

# [1] "" [2] "" [3] "Von Housen Kush, Terry"

有人能想到来找到每个逗号后的 第二个空格 吗?

1 个答案:

答案 0 :(得分:7)

您可以使用

> strsplit(X, ",\\s+\\S+\\K\\s+", perl=TRUE)
[[1]]
[1] "Paulsen Kehr, Diego"           "Schalper Sepúlveda, Alejandro" "Von Housen Kush, Terry"

请参见regex demo

详细信息

  • ,-逗号
  • \s+-超过1个空格
  • \S+-1个以上非空格
  • \K-匹配重置运算符会丢弃到目前为止已匹配的所有文本
  • \s+-超过1个空格