我在R中使用正则表达式,但我希望它是贪婪的左边部分和非贪婪的右边部分。假设我想提取单词“左”和“右”之间的文本,但我希望它是贪婪的,并继续在文本中查找单词“左”,直到找到最后一次出现为止。但是,我也希望它对于“正确”不会贪婪,并在第一次出现时停下来。我如何更改此代码?一个部分贪婪的正则表达式,其他贪婪
gsub(".*left(.*)right.*", string)
作为替代方案,我存入R使用regexpr
字的位置,是有可能使用位置x和位置y之间的正则表达式?
我在R中使用正则表达式,但我希望它是贪婪的左边部分和非贪婪的右边部分。假设我想提取单词“左”和“右”之间的文本,但我希望它是贪婪的,并继续在文本中查找单词“左”,直到找到最后一次出现为止。但是,我也希望它对于“正确”不会贪婪,并在第一次出现时停下来。我如何更改此代码?一个部分贪婪的正则表达式,其他贪婪
gsub(".*left(.*)right.*", string)
作为替代方案,我存入R使用regexpr
字的位置,是有可能使用位置x和位置y之间的正则表达式?
如果R中的正则表达式与Perl兼容,那么添加一个?后面*(或+),使该部分非贪婪:
Input: aaaabaaaaab
Regex: `/a*?b/`
Result: aaaab
这里另一种方法是使用stringi
包。功能stri_replace_last
和stri_replace_first
做的正是你所需要的,即(来自@添的回答使用string
),
library(stringi)
stri_replace_first(stri_replace_last(string, '', regex = '.*left '), '', regex = ' right.*')
#[1] "dog who is"
如果我有'aaaabbbbb',我只是想'ab'?即我希望它在b上贪婪和不贪婪。 – vdvaxel
然后,只是说/ ab /或/ a +?b +/ – Psi