【问题标题】:Regex: How to match words without consecutive vowels?正则表达式:如何匹配没有连续元音的单词?
【发布时间】:2016-08-10 00:15:54
【问题描述】:

我对正则表达式真的很陌生,我已经能够找到可以很容易匹配这个的正则表达式,但我不确定如何只匹配没有它的单词。

我有一个 .txt 文件,其中包含类似这样的字词

sheep
fleece
eggs
meat
potato

我想创建一个正则表达式来匹配元音不连续重复的单词,所以它会返回eggs meat potato

我对正则表达式不是很有经验,而且我一直无法在网上找到有关如何执行此操作的任何信息,所以如果有更多经验的人可以帮助我,那就太棒了。谢谢!

我正在使用 python,并且一直在使用 https://regex101.com 测试我的正则表达式。

谢谢!

编辑:提供了不正确的正则表达式结果示例。固定。

【问题讨论】:

  • 作为替代方案,为什么不继续您当前的解决方案(匹配重复元音的单词),然后在其余逻辑中排除这样的单词?
  • 这是一个很好的选择,但那只是我试图匹配的条件之一。我知道如何匹配所有其他条件,但不是这个。
  • @notHalfBad 请澄清:您尝试了什么,有什么问题?
  • 您可能会使用消极的环顾四周(请参阅stackoverflow.com/a/406408/716118),尽管它可能不是最好的方法。关于替代方案,除了需要多个正则表达式之外,re.match(<other_conditions>) and not re.match(<repeated_vowels>) 的缺点是什么?
  • @smac89 err,我不擅长正确写问题。我已经更新了它,但关键是这些单词中没有没有个连续重复的元音。

标签: python regex


【解决方案1】:

请注意,由于所需的输出包括 meat 但不包括 fleece,因此所需的单词允许有重复的元音,但不能重复相同的元音。

选择没有重复元音的行:

>>> [w for w in open('file.txt') if not re.search(r'([aeiou])\1', w)]
['eggs\n', 'meat\n', 'potato\n']

正则表达式[aeiou] 匹配任何元音(如果您愿意,可以包括y)。正则表达式 ([aeiou])\1 匹配任何元音,后跟相同的元音。因此,not re.search(r'([aeiou])\1', w) 仅适用于不包含重复元音的字符串 w

附录

如果我们想排除meat,因为它连续有两个元音,即使它们不是相同的元音,那么:

>>> [w for w in open('file.txt') if not re.search(r'[aeiou]{2}', w)]
['eggs\n', 'potato\n']

【讨论】:

  • @smac89 但是,meat 没有像 fleece 那样重复的 same 元音。 OP 将 meat 指定为所需输出的一部分。
  • @smac89 是的,这是我的一个错误,哈哈,但他的回答解决了我的问题:D
  • @smac89 我在答案中添加了一种排除任何带有连续元音的行的方法,以便排除 meat
【解决方案2】:

@John1024 的回答应该有效 我也想试试

"\w*(a{2,}|e{2,}|i{2,}|o{2,}|u{2,})\w*"ig

【讨论】:

    猜你喜欢
    • 2020-09-16
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多