所以我正在处理R中的一些数据清理,并且遇到了以下问题。
我要检测以下模式
abc.xyz
并用
替换abc。 xyz
我尝试通过以下方式使用gsub:
gsub("\\w+\\.\\w+", "\\w+\\. \\w+", character_vector, perl = TRUE)
但是,作为输出,我将检测到的字符替换为文字“ w +。w +”。
我已经预先删除了网址和电子邮件,因此这些应该不是问题。问题来自使用 unnest_sentences 时的事实,当上述模式为true时,该函数无法分隔句子。
感谢您的帮助和建议!
答案 0 :(得分:0)
您可以在替换模式中使用具有反向引用的捕获组(在这种情况下,默认的TRE正则表达式引擎可以处理任务):
gsub("(\\w+\\.)(\\w+)", "\\1 \\2", character_vector)
在这里,(\w+\.)(\w+)
捕获1个以上的字符字符和一个点到组1(\1
)中,然后1+单词的字符被捕获到组2(\2
)中。
或者,您可以使用环视(然后,您将需要使用perl=TRUE
参数启用的PCRE引擎):
gsub("\\w+\\.\\K(?=\\w)", " ", character_vector, perl=TRUE)
请参见R demo online。
在这里,\w+\.
匹配1个以上的字符char和一个点,但是\K
省略了该文本,而(?=\w)
仅确保下一个字符是单词char。因此,替换模式在这里仅仅是一个空间。