我正在尝试用非白色空格替换以白色空格为界的逗号,同时保持其他逗号不变(在R中)。
想象一下我有:
j<-"Abc,Abc, and c"
我希望:
"Abc Abc, and c"
这几乎有效:
gsub("[^ ],[^ ]"," " ,j)
但它删除了逗号两边的字符:
"Ab bc, and c"
答案 0 :(得分:5)
您可以使用具有负面lookbehind和预测的PCRE正则表达式:
j <- "Abc,Abc, and c"
gsub("(?<!\\s),(?!\\s)", " ", j, perl = TRUE)
## => [1] "Abc Abc, and c"
请参阅regex demo
<强>详情:
(?<!\\s)
- 在,
,
- 文字,
(?!\\s)
- 在,
另一种解决方案是匹配用词边界包围的,
:
j <- "Abc,Abc, and c"
gsub("\\b,\\b", " ", j)
## => [1] "Abc Abc, and c"
请参阅another R demo。
答案 1 :(得分:3)
你可以使用这样的反向引用:
gsub("([^ ]),([^ ])","\\1 \\2" ,j)
[1] "Abc Abc, and c"
正则表达式中的()
捕获逗号旁边的字符。 \\1
和\\2
按照捕获的顺序返回这些捕获的值。
答案 2 :(得分:3)
我们可以尝试
gsub(",(?=[^ ])", " ", j, perl = TRUE)
#[1] "Abc Abc, and c"
答案 3 :(得分:0)
也许它也有效:
library("stringr")
j<-"Abc,Abc, and c"
str_replace(j,"(\\w+),([\\w]+)","\\1 \\2")