由非白色空间限制的逗号上的正则表达式匹配

tsu*_*ume 5 regex r regular-language

我试图用白色空格替换由非白色空间限制的逗号,同时保持其他逗号不变(在R中).

想象一下,我有:

j<-"Abc,Abc, and c"
Run Code Online (Sandbox Code Playgroud)

而且我要:

"Abc Abc, and c"
Run Code Online (Sandbox Code Playgroud)

这几乎有效:

gsub("[^ ],[^ ]"," " ,j)
Run Code Online (Sandbox Code Playgroud)

但它删除了逗号两边的字符给出:

"Ab bc, and c"
Run Code Online (Sandbox Code Playgroud)

Wik*_*żew 5

您可以使用具有负向lookbehind和lookahead的PCRE正则表达式:

j <- "Abc,Abc, and c"
gsub("(?<!\\s),(?!\\s)", " ", j, perl = TRUE)
## => [1] "Abc Abc, and c"
Run Code Online (Sandbox Code Playgroud)

请参阅正则表达式演示

细节:

  • (?<!\\s) - 在a之前不能有空格 ,
  • , - 文字 ,
  • (?!\\s) - a之后不能有空格 ,

另一种解决方案是匹配,用字边界包围的内容:

j <- "Abc,Abc, and c"
gsub("\\b,\\b", " ", j)
## => [1] "Abc Abc, and c"
Run Code Online (Sandbox Code Playgroud)

另一个R演示.