【问题标题】:Regex to find five consecutive consonants正则表达式查找五个连续的辅音
【发布时间】:2018-05-16 12:02:20
【问题描述】:

我需要一个用于 python 的正则表达式来查找具有五个连续辅音的单词。

这些话会起作用 -

tnortvcvni (rtvcvn)
kahjdflka (hjdflk)

但是这些词不会(没有元音的连续五个字母) -

peanut 
butter
jelly 

【问题讨论】:

标签: python regex


【解决方案1】:

您的意思似乎不是 5 个字符的固定长度,而是最少:

(?:(?![aeiou])[a-z]){5,}

Live demo

注意:如果存在i标志,则设置它。

【讨论】:

    【解决方案2】:

    可能类似于(假设y 是元音)

    [BCDFGHJKLMNPQRSTVWXZbcdfghjklmnpqrstvwxz]{5}
    

    【讨论】:

    • 当然。另一种方法不是更好吗——将 y 添加到范围内?
    • 尽管 OP 说“python”,但仅在正则表达式标签上询问,因此针对不同复杂程度的各种答案是合适的。
    【解决方案3】:

    .*[bcdfghjklmnpqrstvwxyz]{5}.* 是一种方式,假设是小写字母。

    你最好在英语中找到一个有 5 个连续辅音的单词,尽管有几个,例如。 “流行语”甚至是令人抓狂的“tsktsks”。

    【讨论】:

    • 如果支持前瞻,会短一点:(?![a-z]*[aeiou])[a-z]{5}
    • @revo:天哪,这很豪华。您不妨将(i) 放入以不区分大小写。 (我的 reg-ex 知识并没有超出 1990 年代的grep。)
    • 目前还不清楚 OP 到底想要什么。他们谈论 5 个字符长的字符串,但输出有 6 个字符。
    【解决方案4】:

    您可以只排除所有元音,小写和大写,并排除属于单词的所有其他字符NOT(使用\W

    \w*[^aeiouAEIOU\W]{5}\w*
    

    Demo


    更好的是,使用不区分大小写的标志并且只交流小写字母

    (?i)\w*[^aeiou\W]{5}\w*
    

    Demo

    【讨论】:

    • 您缺少 \d_ 并且可以通过使用不区分大小写标志删除其中一个案例
    • @SebastianProske 你确实是对的。我编辑了帖子。
    【解决方案5】:

    有几种方法可以表示字符类中的所有辅音项(均假定不区分大小写):

    • 只需将它们全部列出[bcdfghjklmnpqrstvwxyz]
    • 用范围[b-df-hj-pq-tv-z]列出它们
    • 使用否定字符类 [^\W\d_aeiou](在对 \w 的全 Unicode 支持下无法正常工作)

    取其中一个并简单地添加{5} 以匹配它 5 次。如果您想匹配整个单词而不是仅匹配 5 个辅音部分,也可以匹配周围的字母,例如[a-z]*[b-df-hj-pq-tv-z][a-z]*

    您也可以使用前瞻来执行此操作(如果支持,python 支持),例如(?=[^aeiou]{5})[a-z]{5,} 匹配同时是字母的 5 个非元音的序列。同样可以通过后视来完成,例如[a-z]{5}(?<=[^aeiou]{5}).

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-26
      • 2020-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多