使用gsub替换R中的多个单词
我一直在尝试规范化一堆地址。当使用使用gsub替换R中的多个单词,r,regex,string,gsub,R,Regex,String,Gsub,我一直在尝试规范化一堆地址。当使用gsub()时,是否存在行为类似于\\b\\b但可以替换多个单词的不同正则表达式 address <- c("SE Kellogg", "SE Kellogg Court") gsub("\\bSE Kellogg\\b", "SE Kellogg Court", address) #desired output: "SE Kellogg Court" "SE Kellogg Court" # actual output "SE Kellogg Cou
gsub()
时,是否存在行为类似于\\b\\b
但可以替换多个单词的不同正则表达式
address <- c("SE Kellogg", "SE Kellogg Court")
gsub("\\bSE Kellogg\\b", "SE Kellogg Court", address)
#desired output:
"SE Kellogg Court" "SE Kellogg Court"
# actual output
"SE Kellogg Court" "SE Kellogg Court Court"
地址您可以使用具有负前瞻性的PCRE正则表达式:
\bSE Kellogg\b(?!\s+Court\b)
看
详细信息
\\b
-单词边界
SE Kellogg
-文字子字符串
\\b
-单词边界
(?!\\s+Court\\b)
-如果在当前位置的右侧出现以下情况,则会导致匹配失败的反向前瞻
\\s+
-一个或多个空白字符
Court\\b
-一个完整的单词Court
:
注意:如果在搜索短语周围使用捕获组((…)
),并在替换模式中使用\1
反向引用,则可以缩短替换:
gsub("\\b(SE Kellogg)\\b(?!\\s+Court\\b)", "\\1 Court", address, perl=TRUE)
^ ^ ^^^
您可以使用具有负前瞻性的PCRE正则表达式:
\bSE Kellogg\b(?!\s+Court\b)
看
详细信息
\\b
-单词边界
SE Kellogg
-文字子字符串
\\b
-单词边界
(?!\\s+Court\\b)
-如果在当前位置的右侧出现以下情况,则会导致匹配失败的反向前瞻
\\s+
-一个或多个空白字符
Court\\b
-一个完整的单词Court
:
注意:如果在搜索短语周围使用捕获组((…)
),并在替换模式中使用\1
反向引用,则可以缩短替换:
gsub("\\b(SE Kellogg)\\b(?!\\s+Court\\b)", "\\1 Court", address, perl=TRUE)
^ ^ ^^^
不太清楚。如果要在SE Kellogg
之后删除可选的Court
,请使用gsub(\\bSE Kellogg\\b(?:\\s+Court\\b)?,“SE Kellogg Court”,address)
。如果要删除任何单词,请使用“\\bSE Kellogg\\b(?:\\s+\\w+\\b)?”
。请注意,\b
是一个零宽度断言,不消耗任何文本,不能自行替换任何内容。要替换文本,您需要使用符合指定条件的某种模式。。。它们是什么?问题不是有一个可选的法庭,而是我以前的gsub()
引入了一个额外的法庭。是否可以仅向具有SE Kellogg
但不具有SE Kellogg Court
的行添加Court
?谢谢你试一试!不太清楚。如果要在SE Kellogg
之后删除可选的Court
,请使用gsub(\\bSE Kellogg\\b(?:\\s+Court\\b)?,“SE Kellogg Court”,address)
。如果要删除任何单词,请使用“\\bSE Kellogg\\b(?:\\s+\\w+\\b)?”
。请注意,\b
是一个零宽度断言,不消耗任何文本,不能自行替换任何内容。要替换文本,您需要使用符合指定条件的某种模式。。。它们是什么?问题不是有一个可选的法庭,而是我以前的gsub()
引入了一个额外的法庭。是否可以仅向具有SE Kellogg
但不具有SE Kellogg Court
的行添加Court
?谢谢你试一试!这太棒了!谢谢你的详细回答。我现在应该能够将这个解决方案转换为剩余的不匹配地址了。我回来再次感谢你认真地救了我一命!为什么人们会使用手写地址作为主键!???如果没有这个回答,我会完蛋的。这太棒了!谢谢你的详细回答。我现在应该能够将这个解决方案转换为剩余的不匹配地址了。我回来再次感谢你认真地救了我一命!为什么人们会使用手写地址作为主键!???如果没有这个答复,我就完蛋了。