Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用gsub替换R中的多个单词_R_Regex_String_Gsub - Fatal编程技术网

使用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
?谢谢你试一试!这太棒了!谢谢你的详细回答。我现在应该能够将这个解决方案转换为剩余的不匹配地址了。我回来再次感谢你认真地救了我一命!为什么人们会使用手写地址作为主键!???如果没有这个回答,我会完蛋的。这太棒了!谢谢你的详细回答。我现在应该能够将这个解决方案转换为剩余的不匹配地址了。我回来再次感谢你认真地救了我一命!为什么人们会使用手写地址作为主键!???如果没有这个答复,我就完蛋了。