【问题标题】:Gsub regex replacementGsub 正则表达式替换
【发布时间】:2013-12-09 23:26:32
【问题描述】:

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

现在我有:

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

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

我想从:
a x -> a_x
b z -> b_z
hello world b x a z you are -> 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) ... 以此类推。

如果有人想在其中加入一点理论,我们将不胜感激,但我正在赶上最后期限,所以同时回答将是理想的。

谢谢。

【问题讨论】:

  • 写这个问题的时间可能比通过gsub 文档自己找到答案的时间要长。它甚至还有使用\\1\\2 等的示例。

标签: regex r replace gsub


【解决方案1】:

您必须使用\\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"

【讨论】:

  • 谢谢。该文档听起来像是“\\ 1”是指某个地方的退格数。分割实际上是如何完成的?它只是自动空格分隔吗?
  • @user3030872 正如我在答案中已经提到的,\\1 是第一个 () 中的字符串。
猜你喜欢
  • 2015-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多