我想使用gsub来更正我数据中的某些名称。我想要诸如" R之类的名字。 J&#34。和" A. J&#34。字母之间没有空格。
例如:
x <- "A. J. Burnett"
我想使用gsub匹配他的名字的模式,然后删除空格:
gsub("[A-Z]\\.\\s[A-Z]\\.", "[A-Z]\\.[A-Z]\\.", x)
但我明白了:
[1] "[A-Z].[A-Z]. Burnett"
显然,不是[A-Z],而是我想要原始名称中的实际字母。我怎么能这样做?
答案 0 :(得分:12)
通过在(...)
中包含模式来使用捕获组,并使用\\1
,\\2
等参考捕获的模式。在这个例子中:
x <- "A. J. Burnett"
gsub("([A-Z])\\.\\s([A-Z])\\.", "\\1.\\2.", x)
[1] "A.J. Burnett"
另请注意,在替换中,您不需要逃避.
字符,因为它们在那里没有特殊含义。
答案 1 :(得分:2)
您可以使用前瞻((?=\\w\\.)
)和后瞻((?<=\\b\\w\\.)
)来定位此类空格,并将其替换为&#34;&#34;。
x <- c("A. J. Burnett", "Dr. R. J. Regex")
gsub("(?<=\\b\\w\\.) (?=\\w\\.)", "", x, perl = TRUE)
# [1] "A.J. Burnett" "Dr. R.J. Regex"
前瞻匹配单词字符(\\w
),后跟句点(\\.
),后卫匹配单词边界(\\b
)后跟一个单词字符和句号。