Regex 如何在R中的单词之间替换特殊字符

Regex 如何在R中的单词之间替换特殊字符,regex,r,substitution,Regex,R,Substitution,我有一串字符 str = c(".wow", "if.", "not.confident", "wonder", "have.difficulty", "shower") 我试图用空格替换单词之间的“.”。看起来是这样的 ".wow", "if.", "not confident", "wonder", "have difficulty", "shower" 首先,我试过了 gsub("[\\w.\\w]", " ", str) [1] " o " "if"

我有一串字符

str = c(".wow", "if.", "not.confident", "wonder", "have.difficulty", "shower")
我试图用空格替换单词之间的“.”。看起来是这样的

".wow", "if.", "not confident", "wonder", "have difficulty", "shower"
首先,我试过了

gsub("[\\w.\\w]", " ", str)
[1] "  o "            "if"              "not confident"   " onder"         
[5] "have difficulty" "sho er " 
它给了我想要的空白,但把所有的w都删掉了。然后,我试着

gsub("\\w\\.\\w", " ", str)
[1] ".wow"          "if"            "no onfident"   "wonder"       
[5] "hav ifficulty" "shower."    
它保留了w,但却在“.”前后带走了其他角色

我也不能用这个

gsub("\\.", " ", str)
[1] " wow"             "if "              "not.confident"   "wonder"         
[5] "have.difficulty" "shower" 
因为它会带走“不在字里行间”

试试看

gsub('(\\w)\\.(\\w)', '\\1 \\2', str)
#[1] ".wow"            "if."             "not confident"   "wonder"         
#[5] "have difficulty" "shower"       

使用:

可以通过将要分组的字符放在一组括号中来创建捕获组
(…)
。反向引用可以回忆出与捕获组匹配的内容

反向引用指定为(
\
);后跟一个数字,表示组的编号

使用断言:

Lookarounds是零宽度断言。它们不会“使用”字符串上的任何字符


sub(“(?成功了!请你解释一下我为什么要添加括号,好吗?@wen它已经在hwnd的帖子中解释过了。@rawr谢谢,那更好。我想如果没有
perl=TRUE
@rawr它给我的
gsub('\\b\\\\\b',''''str str)\[1]“哇”“如果”“不自信”“奇迹”[5]“洗澡有困难”
gsub('(?<=[^.])[.](?=[^.])', ' ', str, perl=TRUE)
gsub('\\b\\.\\b', ' ', str, perl = TRUE)
sub('(\\w)\\.(\\w)', '\\1 \\2', str)
# [1] ".wow"            "if."             "not confident"   "wonder"         
# [5] "have difficulty" "shower"
sub('(?<=\\w)\\.(?=\\w)', ' ', str, perl = TRUE)