替换 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 中执行此操作的最佳方法是什么?
如果我现在一定要计划这个,我可能会:
str_extract(sampleText, pattern = \w(?: \w)+)
(还要记住每次检测的字符位置)
str_replace(extractedText, " ", "")
使用步骤 1 中的索引,从末尾开始向后插入替换的文本。
但是,这对我来说听起来效率很低。我猜有一种方法可以做到这一点而不用大惊小怪,对吧?
我建议使用基于 PCRE 的正则表达式,gsub
来自 base R:
gsub("(?<!\S)(\w)\s(?=\w\b)", "\1", sampleText, perl=TRUE)
[1] "Abc defg hijk, l mn, op qrst."
详情:
(?<!\S)
- 之前不应有非空白字符...
(\w)
- 第 1 组捕获 1 个单词字符([a-zA-Z0-9_]
,替换为 [a-zA-Z]
以仅匹配 ASCII 字母,或根据需要调整)
\s
- 一个空格
(?=\w\b)
- 必须有一个单词 char 后跟一个单词边界。
替换模式中的
只是将捕获的值插入组 1
回到结果字符串。
我有一些文本,我想在其中检测所有连续的单字字符并删除它们之间的空格。但是,应尊重标点符号。例如,如果我有:
sampleText = "Abc defg h i j k, l mn, o p qrst."
我希望我的结果是这样的:
processedText = "Abc defg hijk, l mn, op qrst."
在 R 中执行此操作的最佳方法是什么?
如果我现在一定要计划这个,我可能会:
str_extract(sampleText, pattern = \w(?: \w)+)
(还要记住每次检测的字符位置)str_replace(extractedText, " ", "")
使用步骤 1 中的索引,从末尾开始向后插入替换的文本。
但是,这对我来说听起来效率很低。我猜有一种方法可以做到这一点而不用大惊小怪,对吧?
我建议使用基于 PCRE 的正则表达式,gsub
来自 base R:
gsub("(?<!\S)(\w)\s(?=\w\b)", "\1", sampleText, perl=TRUE)
[1] "Abc defg hijk, l mn, op qrst."
详情:
(?<!\S)
- 之前不应有非空白字符...(\w)
- 第 1 组捕获 1 个单词字符([a-zA-Z0-9_]
,替换为[a-zA-Z]
以仅匹配 ASCII 字母,或根据需要调整)\s
- 一个空格(?=\w\b)
- 必须有一个单词 char 后跟一个单词边界。
替换模式中的 只是将捕获的值插入组 1
回到结果字符串。