R 在这个gsub示例中,我做错了什么?

R 在这个gsub示例中,我做错了什么?,r,regex,stringr,R,Regex,Stringr,。使用以下示例: str <- c("i.e., George W. Bush", "Lyndon B. Johnson, etc.") gsub("([A-Z])[.]?", "\\1", str) 但我在R上运行了一个相同的脚本,结果如下: str <- c("i.e., George W. Bush", "Lyndon B. Johnson, etc.") gsub("([A-Z])[.]?", "\\1", str) [1] "i.e., George W Bush"

。使用以下示例:

str <- c("i.e., George W. Bush", "Lyndon B. Johnson, etc.")
gsub("([A-Z])[.]?", "\\1", str)
但我在R上运行了一个相同的脚本,结果如下:

str <- c("i.e., George W. Bush", "Lyndon B. Johnson, etc.")
gsub("([A-Z])[.]?", "\\1", str)
[1] "i.e., George W Bush"    "Lyndon B Johnson, etc."

str看起来你所做的是对的,实际上教程中有一个错误。你可以看到,我也测试了正则表达式。所给的正则表达式是捕获任何大写字母,这些大写字母后面可能有点,也可能没有点。例如,“乔治·W·布什”中的“W.”被替换为“W”,但“i.e.”没有被捕获和替换,因为所有字符都没有大写。如果我们有“I.E”,它将被“IE”取代。为了捕获给定的名称,我们需要一个不同的正则表达式。一种方法可能是捕获名字、中间首字母和姓氏。现在,您可以使用正则表达式
*([A-Z][A-Z]+)\s([A-Z])[.]+\s([A-Z][A-Z]+).*
查看或在R中使用

str <- c("i.e., George W. Bush", "Lyndon B. Johnson, etc.")
gsub(".*([A-Z][a-z]+) ([A-Z])[.]+ ([A-Z][a-z]+).*", "\\1 \\2 \\3", str)
#> [1] "George W Bush"    "Lyndon B Johnson"
str[1]“乔治·W·布什”“林登·B·约翰逊”

但这可能不是对一些名字进行净化的最有效方法。

教程是错误的。除非字符串
gsub(([A-z]+)[.?”,“\\1”,c(“乔治·W·布什”,“林登·B·约翰逊”)
rawr有答案。我强烈建议作为学习正则表达式的一个小教程。它是独立于平台的(大部分),所以这些知识可以转换成任何语言。哦,我对Regex非常了解。我在那里结束的不仅仅是关于
gsub
的教程。我喜欢它,因为一些奇怪的原因。
str <- c("i.e., George W. Bush", "Lyndon B. Johnson, etc.")
gsub(".*([A-Z][a-z]+) ([A-Z])[.]+ ([A-Z][a-z]+).*", "\\1 \\2 \\3", str)
#> [1] "George W Bush"    "Lyndon B Johnson"