我需要匹配以两个不同的元音开头的任何“r”。例如,“我们的”或“ pear ”将匹配,但“bar”或“aar”将不匹配。我确实设法匹配了两个不同的元音,但是我仍然无法确定后面的'r'的后向条件(...
)。 (?<=...)r
和...\\Kr
均不会产生任何结果。有任何想法吗?
x <- c('([aeiou])(?!\\1)(?=(?1))')
y <- c('our','pear','bar','aar')
y[grepl(paste0(x,collapse=''),y,perl=T)]
## [1] "our" "pear"`
最佳答案
这两个解决方案似乎有效:
为什么不这样:
x <- '(?<=a[eiou]|e[aiou]|i[aeou]|o[aeiu]|u[aeio])r'
y[grepl(x, y, perl=T)]
\K
方式:x <- '([aeiou])(?!\\1)[aeiou]\\Kr'
y[grepl(x, y, perl=T)]
为什么不这样变体(可能更有效,因为它之前搜索“r”):
x <- 'r(?<=a[eiou]r|e[aiou]r|i[aeou]r|o[aeiu]r|u[aeio]r)'
或快速排除不带两个元音的“r”(无需测试整个交替)
x <- 'r(?<=[aeiou][aeiou]r)(?<=a[eiou]r|e[aiou]r|i[aeou]r|o[aeiu]r|u[aeio]r)'
关于regex - R:环顾四周,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29605725/