首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何匹配R中的二项式表达式?

如何匹配R中的二项式表达式?
EN

Stack Overflow用户
提问于 2020-07-06 10:46:30
回答 1查看 50关注 0票数 2

我想要匹配二元音,也就是说,双音节词,有时连字符,与略为变化的音节重叠;变体总是涉及重叠式音节中的第一个字母(也可能是第二个):

代码语言:javascript
复制
x <- c("pow-wow", "pickwick", "easy-peasy", "nitty-gritty", "bzzzzzzz", "mmmmmm", "shish", "wedged", "yaaaaaa")

在这里,我们在pow-wowpickwickeasy-peasynitty-gritty (这是预期的输出)中说过音节重叠,但在bzzzzzzzmmmmmmshishwedgedyaaaaa中没有。

这个正则表达式至少可以消除wedged(发音为一个音节)和单音节单词,方法是要求捕获组中有一个元音:

代码语言:javascript
复制
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也得到了匹配。为了不匹配,我的感觉是捕捉组不允许包含两个相同的元音,但我不知道如何实现这个限制。有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-06 11:36:45

看起来,如果在字符串中找不到相同的块,则需要匹配在初始字符和2个或更多重复字符之后不能包含ed的单词。此外,允许的“差异”窗口在开头和中部是0到2个字符。

你可以用

代码语言:javascript
复制
\b\w{0,2}(?!((.)\2+)(?!.*\1)|ed)([aeiou]\w+)-?\w\w?\3\b

regex演示

详细信息

  • \b -一个单词边界(如果您的“单词”等于整字符串,可以使用^ )。
  • \w{0,2} -两个或多个单词字符(用\p{L}替换为只匹配字母)
  • (?!((.)\2+)(?!.*\1)|ed) -不允许在字符串后面重复的ed或两个或多个相同的字符立即位于当前位置的右侧。
  • ([aeiou]\w+) -元音(在第3组中捕获)和1+单词字符(用\p{L}替换为只匹配字母)
  • -? -一个可选的连字符
  • \w\w? -1或2个字charsd
  • \3 -与第3组捕获的值相同
  • \b -一个单词边界(如果您的“单词”等于整字符串,可以使用$ )。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62754429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档