首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只匹配第一个元音,并将其包含在匹配中。

只匹配第一个元音,并将其包含在匹配中。
EN

Stack Overflow用户
提问于 2018-07-08 10:10:10
回答 4查看 449关注 0票数 2

我试图在字符串中找到元音的第一次匹配,然后在ruby中分割一个字符串,但是我没有得到正确的结果。

我试过的是

代码语言:javascript
复制
"rodio".partition(/[(?=aeiouAEIOU)].*/).reject(&:empty?)

但我回来了["r", "odio"]。不管我说什么,我都要把那个没有元音和半音的部分拿回来,但是我需要那个没有元音的部分来包含它。所以应该是

["ro", "dio"]

celery应该是["ce", "lery"],而不是["c", "elery"]等等。

我遗漏了什么?我什么都试过了,但我不知道怎么写。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-07-08 10:13:13

您可以使用带有split限制参数的正向查找和2

代码语言:javascript
复制
.split(/(?<=[aeiou])/i, 2)

在线Ruby演示

(?<=[aeiou])模式是一个正的查找,它匹配紧跟在aeiou前面的位置(用/i修饰符启用不区分大小写的匹配)。2限制参数使引擎只将字符串分成2部分,因此在第一次匹配时只会分裂一次。

您肯定可以在.partition中使用相同的模式。

代码语言:javascript
复制
.partition(/(?<=[aeiou])/i).reject(&:empty?)
票数 4
EN

Stack Overflow用户

发布于 2018-07-08 10:54:31

你不需要使用任何查找来做这件事,一个非贪婪的量词就足够了:

代码语言:javascript
复制
"rodio".partition(/.*?[aeiou]/i).reject(&:empty?)

或者更好的方法是使用一个否定的字符类:

代码语言:javascript
复制
"rodio".partition(/[^aeiou]*./i).reject(&:empty?)
票数 4
EN

Stack Overflow用户

发布于 2018-07-08 10:18:28

只需使用正面的背景:"rodio".partition(/(?<=[aeiou])/i).reject(&:empty?)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51230924

复制
相关文章

相似问题

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