【发布时间】:2020-07-06 10:46:30
【问题描述】:
我想匹配二项式,即双音节词,有时连字符,音节重复略有不同;变体总是与重复音节中的第一个(也可能是第二个)字母有关:
x <- c("pow-wow", "pickwick", "easy-peasy", "nitty-gritty", "bzzzzzzz", "mmmmmm", "shish", "wedged", "yaaaaaa")
在这里,我们在pow-wow、pickwick、easy-peasy 和nitty-gritty 中说过音节重复(这就是预期的输出),但在bzzzzzzz、@ 中不是 987654330@、shish、wedged 和 yaaaaa。
这个正则表达式通过要求捕获组中存在元音,至少设法摆脱了wedged(发音为一个音节)以及单音节词:
grep("\\b\\w?((?!ed)(?=[aeiou])\\w{2,})-?\\w\\w?\\1\\b$", x, value = T, perl = T)
[1] "pow-wow" "pickwick" "easy-peasy" "nitty-gritty" "yaaaaa"
不过,yaaaaa 也在匹配中。 不匹配它我的感觉是捕获组应该被禁止包含两个相同的元音立即连续但我不知道如何实现该限制。
有什么想法吗?
【问题讨论】:
-
非常好!为什么
"\\b\\w?(?!(.)\\1|ed)([aeiou]\\w+)-?\\w\\w?\\2\\b"不匹配choochoo("\\b\\w(?!(.)\\1|ed)(\\w{2,})-?\\w\\w?\\2\\b"匹配)? -
也许你只想排除重复的字符,如果它们后面没有右边的相同值?
"\\b\\w{0,2}(?!((.)\\2+)(?!.*\\1)|ed)([aeiou]\\w+)-?\\w\\w?\\3\\b",见demo -
是的,太好了。这也得到了
wee-wee,这是以前的正则表达式没有的!您是否愿意将此作为答案发布并添加一些解释,因为这现在非常复杂,我和其他人肯定想从中学习?
标签: r regex regex-lookarounds