在第一个以大写字母开头的单词后添加逗号

Add comma after first word starting with a capital letter

正如标题所说。我有一堆名字,我需要在第一个以大写字母开头的单词后添加一个逗号。

一个例子:

txt <- c( "de Van-Smith J", "van der Smith G.H.", "de Smith JW", "Smith JW")

结果应该是:

[1] "de Van-Smith, J" "van der Smith, G.H." "de Smith, JW" "Smith, JW"  

我主要尝试使用 gsub()stringr::str_replace(),但我正在努力使用正则表达式,如有任何建议,我们将不胜感激。

你可以使用-

sub("([A-Z][\w-]+)", "\1,", txt, perl = TRUE)

#[1] "de Van-Smith, J"   "van der Smith, G.H." "de Smith, JW"       "Smith, JW"

其中 ([A-Z][\w-]+) 捕获以大写字母开头且后面有 - 或任意数量的单词字符的单词。

我们可以使用

sub('\b([A-Z]\S+)', "\1,", txt)
[1] "de Van-Smith, J"     "van der Smith, G.H." "de Smith, JW"        "Smith, JW"          

另一个sub选项

> sub("([A-Z].*)(?=\s)", "\1,", txt, perl = TRUE)
[1] "de Van-Smith, J"     "van der Smith, G.H." "de Smith, JW"
[4] "Smith, JW"