替换 R 中的文本上下文

Replacing text context in R

我有一些文本,我想在其中检测所有连续的单字字符并删除它们之间的空格。但是,应尊重标点符号。例如,如果我有:

sampleText = "Abc defg h i j k, l mn, o p qrst."

我希望我的结果是这样的:

processedText = "Abc defg hijk, l mn, op qrst."

在 R 中执行此操作的最佳方法是什么?

如果我现在一定要计划这个,我可能会:

  1. str_extract(sampleText, pattern = \w(?: \w)+)(还要记住每次检测的字符位置)

  2. str_replace(extractedText, " ", "")

  3. 使用步骤 1 中的索引,从末尾开始向后插入替换的文本。

但是,这对我来说听起来效率很低。我猜有一种方法可以做到这一点而不用大惊小怪,对吧?

我建议使用基于 PCRE 的正则表达式,gsub 来自 base R:

gsub("(?<!\S)(\w)\s(?=\w\b)", "\1", sampleText, perl=TRUE)
[1] "Abc defg hijk, l mn, op qrst."

regex demo is here.

详情:

  • (?<!\S) - 之前不应有非空白字符...
  • (\w) - 第 1 组捕获 1 个单词字符([a-zA-Z0-9_],替换为 [a-zA-Z] 以仅匹配 ASCII 字母,或根据需要调整)
  • \s - 一个空格
  • (?=\w\b) - 必须有一个单词 char 后跟一个单词边界。

替换模式中的 只是将捕获的值插入组 1 回到结果字符串。