如果字符串包含在模式中,如何替换部分字符串

sta*_*ant 1 regex r stringr

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

x <- c('test_(match)','test_xMatchToo','test_a','test_b') 
Run Code Online (Sandbox Code Playgroud)

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

x <- c('test(match)','testxMatchToo','test_a','test_b') 
Run Code Online (Sandbox Code Playgroud)

怎么做(使用任何包都没问题)?

Seb*_*icz 5

使用前瞻:

_(?=[(x])
Run Code Online (Sandbox Code Playgroud)

前瞻的做法是断言模式匹配,但实际上并不匹配它正在展望的模式.所以,在这里,最终的匹配文本只包含下划线,但是前瞻声明它后跟一个 x(.

在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
)
Run Code Online (Sandbox Code Playgroud)