我在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