【问题标题】:How can I replace part of a string if it is included in a pattern如果字符串包含在模式中,我如何替换它的一部分
【发布时间】:2016-11-15 17:55:41
【问题描述】:

我正在寻找一种方法来替换以下每个字符中的所有 _(比如 ''

x <- c('test_(match)','test_xMatchToo','test_a','test_b') 

当且仅当_ 后跟(x。所以想要的输出是:

x <- c('test(match)','testxMatchToo','test_a','test_b') 

如何做到这一点(使用任何包都可以)?

【问题讨论】:

  • 我能想到的最简单的方法就是将_(_x 替换为'',根本不使用任何正则表达式——这样会更快更容易阅读。跨度>
  • 抱歉,请执行此操作 - 将 _( 替换为 ( 并将 _x 替换为 x
  • John 的建议 gsub("_([(x])", "\\1", x) 对我来说似乎足够通用,尽管这不是“不使用任何正则表达式”,所以我可能有误解。
  • 是的,不确定他的意思...但也许我误解了他想用新字符串替换两个字符串,这是一个最小的例子,我可以让更多的聊天者过滤.. .

标签: r regex stringr


【解决方案1】:

使用lookahead

_(?=[(x])

前瞻的作用是断言模式匹配,但实际上并不匹配它正在寻找的模式。因此,在这里,最终匹配文本仅包含下划线,但前瞻断言它后面跟着 x(

Demo on Regex101

您的 R 代码看起来有点像这样(为清楚起见,每行一个 arg):

gsub(
    "_(?=[(x])",                            # The regex
    "",                                     # Replacement text
    c("your_string", "your_(other)_string"), # Vector of strings
    perl=TRUE                               # Make sure to use PCRE
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-09
    • 2018-10-12
    • 1970-01-01
    • 1970-01-01
    • 2017-02-07
    • 2011-07-15
    相关资源
    最近更新 更多