【问题标题】:excluding words with consecutive repeat characters不包括具有连续重复字符的单词
【发布时间】:2013-12-20 11:15:45
【问题描述】:

假设我有一个这样的单词列表:mouse、abba、roar、accent

我需要一个匹配鼠标和咆哮的正则表达式,但不匹配 abba 或口音,因为最后两个有连续的重复字符(bb 和 cc)。

我设法想出了以下模式来仅匹配带有双连续字符的单词:

.*(.)\1.*

但是我需要的是相反的,但我很难反转它。

【问题讨论】:

    标签: regex


    【解决方案1】:

    你可以用这个:

    \b(?:([a-z])(?!\1))+\b
    

    它使用否定的前瞻(?!..) 来测试每个捕获是否被其自身所跟踪。为了确保该模式不会在单词结尾或单词中间开始剪切单词,我在每一侧添加了单词边界\b

    另一种方式:

    (?![a-z]*([a-z])\1)\b[a-z]+\b
    

    【讨论】:

    • 非常感谢,它有效。我现在就试着理解它!
    • @DanielS:当您记住前瞻只是一种检查而不是匹配结果的一部分时,这很容易理解。
    • 了解关于前瞻的部分。为什么?:虽然?
    • @DanielS: (?:..) 只是一个非捕获组。我用它来用前瞻断言包围每个字符。我重复这组(+),因此每个字符都被逐个检查。
    【解决方案2】:

    您可以使用这个基于前瞻的正则表达式:

    ^(?:(.)(?!\1))*$
    

    【讨论】:

    • 嗯。由于某种原因,regexpal.com 不起作用。我会检查我的本地机器,谢谢。
    • 确保你使用gm标志
    • @anubhava:恭喜你获得 100k :-)
    • @M42: 非常感谢我的朋友 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-29
    • 1970-01-01
    • 1970-01-01
    • 2012-04-29
    • 1970-01-01
    相关资源
    最近更新 更多