以非白色 space 为界的逗号正则表达式匹配
Regular expression matching on comma bounded by nonwhite space
我正在尝试用白色 space 替换由非白色 space 包围的逗号,同时保持其他逗号不变(在 R 中)。
假设我有:
j<-"Abc,Abc, and c"
我想要:
"Abc Abc, and c"
这几乎可以工作:
gsub("[^ ],[^ ]"," " ,j)
但是它删除了逗号两边的字符,给出:
"Ab bc, and c"
您可以像这样使用反向引用:
gsub("([^ ]),([^ ])","\1 \2" ,j)
[1] "Abc Abc, and c"
正则表达式中的()
捕获逗号附近的字符。 \1
和 \2
return 这些捕获的值按照它们被捕获的顺序排列。
我们可以试试
gsub(",(?=[^ ])", " ", j, perl = TRUE)
#[1] "Abc Abc, and c"
您可以使用带有负向后视和前视的 PCRE 正则表达式:
j <- "Abc,Abc, and c"
gsub("(?<!\s),(?!\s)", " ", j, perl = TRUE)
## => [1] "Abc Abc, and c"
详情:
(?<!\s)
- ,
之前不能有空格
,
- 文字 ,
(?!\s)
- ,
之后不能有空格
另一种解决方案是匹配包含在单词边界中的 ,
:
j <- "Abc,Abc, and c"
gsub("\b,\b", " ", j)
## => [1] "Abc Abc, and c"
也许它也有效:
library("stringr")
j<-"Abc,Abc, and c"
str_replace(j,"(\w+),([\w]+)","\1 \2")
我正在尝试用白色 space 替换由非白色 space 包围的逗号,同时保持其他逗号不变(在 R 中)。
假设我有:
j<-"Abc,Abc, and c"
我想要:
"Abc Abc, and c"
这几乎可以工作:
gsub("[^ ],[^ ]"," " ,j)
但是它删除了逗号两边的字符,给出:
"Ab bc, and c"
您可以像这样使用反向引用:
gsub("([^ ]),([^ ])","\1 \2" ,j)
[1] "Abc Abc, and c"
正则表达式中的()
捕获逗号附近的字符。 \1
和 \2
return 这些捕获的值按照它们被捕获的顺序排列。
我们可以试试
gsub(",(?=[^ ])", " ", j, perl = TRUE)
#[1] "Abc Abc, and c"
您可以使用带有负向后视和前视的 PCRE 正则表达式:
j <- "Abc,Abc, and c"
gsub("(?<!\s),(?!\s)", " ", j, perl = TRUE)
## => [1] "Abc Abc, and c"
详情:
(?<!\s)
-,
之前不能有空格
,
- 文字,
(?!\s)
-,
之后不能有空格
另一种解决方案是匹配包含在单词边界中的 ,
:
j <- "Abc,Abc, and c"
gsub("\b,\b", " ", j)
## => [1] "Abc Abc, and c"
也许它也有效:
library("stringr")
j<-"Abc,Abc, and c"
str_replace(j,"(\w+),([\w]+)","\1 \2")