【问题标题】:regex character span正则表达式字符跨度
【发布时间】:2012-08-02 12:41:25
【问题描述】:

我正在尝试更多地了解 R 中的正则表达式(通过一些教程工作)并且遇到了一些我无法工作的东西。我正在尝试获取 2 个字符(包括这些字符并替换它们)之间的内容。有人可以帮助我从这些正则表达式中获得所需的行为吗?

d <- c("xtfo_oin5h;lx", "6b_arin;7", "xin;7")
gsub("t.+?l", "HERE", b)
gsub("_.+?\\;", "HERE", b)

Desired outcomes for these two statements:
[1] "xHEREx"    "6b_arin;7" "xin;7"
[1] "xtfoHERElx" "6bHERE7"     "xin;7"

【问题讨论】:

  • 可能是因为你是gsubbing 矢量b,而你的实际矢量是d
  • 另外,我认为第一个模式的预期结果应该是:[1] "xHEREx" "6b_arin;7" "xin;7"。您的gsub 中没有任何内容可以处理从d 中的第二个和第三个项目中删除分号。
  • 抱歉打扰了。 mrdwab 你能发布解决方案吗?我忙于尝试不同的教程,不小心复制了错误的字符串。
  • @mrdwab 我编辑了问题以反映您的第二条评论。

标签: regex r


【解决方案1】:

这似乎只是换位的一个小问题,在这种情况下,将b 误认为d。 ;-)

gsub("t.+?l", "HERE", d)
gsub("_.+?\\;", "HERE", d)

按预期工作!

> gsub("t.+?l", "HERE", d)
[1] "xHEREx"    "6b_arin;7" "xin;7"    
> gsub("_.+?\\;", "HERE", d)
[1] "xtfoHERElx" "6bHERE7"    "xin;7" 

【讨论】:

    【解决方案2】:

    也许

    gsub("(.*)t.+?l(.*)", "\\1HERE\\2", d)
    
    gsub("(.*)_.+?\\;(.*)", "\\1HERE\\2", d)
    

    但问题有点不清楚

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-29
      • 2014-10-22
      相关资源
      最近更新 更多