regex - Gsub 正则表达式替换

标签 regex r replace gsub

我正在尝试在 R 中进行 gsub 替换。我想从由单个空格分隔的两个列表中识别两个术语,并将其替换为下划线。我已成功识别匹配项,但我在正则表达式方面经验不足,无法理解 gsub 文档。有人可以帮忙编写 gsub 吗?

现在我有:

gsub("(a|b|c)\\s+(x|y|z)","(a|b|c)_(x|y|z)",a x)

(注意:如果重要的话,字符串中有几个地方与此匹配)

我想从:
一个 x -> a_x
b z -> b_z
hello world b x how are a z you -> hello world b_x how are a_z you...等等。

相反,它会:
a x -> (a|b|c)(x|y|z)
b z -> (a|b|c)
(x|y|z) ... 等等。

如果有人想在这方面提出一些理论,我们将不胜感激,但我正在赶最后期限,因此最好同时回答。

谢谢。

最佳答案

您必须使用 \\1\\2 将第一个和第二个 () 中的术语替换为自身。

vec <- "hello world b x how are a z you"

gsub("(a|b|c)\\s+(x|y|z)","\\1_\\2", vec)
# [1] "hello world b_x how are a_z you"

关于regex - Gsub 正则表达式替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20189644/

相关文章:

python - 将带有键和值的字符串转换为 python 字典的最有效方法

java - 使用 replaceAll 或 Pattern Matcher 替换字符串

PHP 替换 HTML 标签以外的字符

r - 根据R中每列中的每个值创建一个计数表

在 R 中使用正则表达式序列进行正则表达式数据清除

python - 如何在 string.replace 中输入正则表达式?

java - Java中根据出现次数分割字符串

ruby -\b 在 Ruby 正则表达式中的真正含义是什么?

regex - 匹配任何由单词边界包围的九位数字,但不匹配以句点开头的数字

r - 如何删除数据框中特定列之前的所有列?