2016-11-15 31 views
1

我正在寻找一种方式,每个以下字符我如何替换字符串的一部分,如果它被包含在一个模式

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

,当且仅当全部更换_(由比如说''_之后是(x。所以输出想要的是:

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

这是怎么做到的(使用任何包是好的)?

+0

我能想到的最简单的办法就是更换'_('和'_x ''''不用任何正则表达式 - 它会更快更容易阅读。 –

+0

噢,对不起,这样做 - 将'_('用'('和'_x'替换为'x') –

+1

约翰的建议,'gsub(“_([(x])”,“\\ 1”,x)'似乎对我来说足够通用,尽管这不是“没有使用任何正则表达式”,所以也许我误解了。 – Frank

回答

5

使用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 
) 
相关问题