在字符串中查找模式并替换检测到的字符串,并对其进行稍加修改

时间:2018-07-27 09:21:04

标签: r regex

所以我正在处理R中的一些数据清理,并且遇到了以下问题。

我要检测以下模式

  

abc.xyz

并用

替换
  

abc。 xyz

我尝试通过以下方式使用gsub:

gsub("\\w+\\.\\w+", "\\w+\\. \\w+", character_vector, perl = TRUE)

但是,作为输出,我将检测到的字符替换为文字“ w +。w +”。

我已经预先删除了网址和电子邮件,因此这些应该不是问题。问题来自使用 unnest_sentences 时的事实,当上述模式为true时,该函数无法分隔句子。

感谢您的帮助和建议!

1 个答案:

答案 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。因此,替换模式在这里仅仅是一个空间。