【问题标题】:Regex: with repeated characters正则表达式:重复字符
【发布时间】:2015-06-07 15:15:39
【问题描述】:

我试图捕捉一个单词中每两个重复的字符。我试过这个:

(\w)\1+

但由于某种原因,它只捕获前两对。例如:单词“hellokitty”,它捕获了“ll”并忽略了另一个“tt”,正如regex101 中测试的那样

【问题讨论】:

  • 请注意,您的表达式不是“捕获每两个重复字符”——它捕获尽可能多的个重复字符。例如,在w000t 中,它匹配000。要匹配 any 两个重复字符,请使用 (\w)\1。要匹配两个字符,您需要(\w)\1(?!\1)(实际上是(\w)(?<!\1\1)\1(?!\1),但看起来您是不允许的:“子模式引用不允许在断言后面查看” - 请参阅stackoverflow.com/questions/30678150/…为此)。
  • 非常感谢我没注意到

标签: regex character


【解决方案1】:

如果你想多次重复一个正则表达式,你必须使用global 标志。在 Regex101 上,只需将 g 放在正则表达式旁边的框中。

如何在代码中使用它取决于您使用的语言。

Javascript

/pattern/flags
new RegExp(pattern[, flags])

例子:

regex = /(\w)\1+/g;
regex = new RegExp("(\w)\1+", "g");

Python

re.compile(pattern, flags=0)

但是 python 没有global 标志。要查找所有出现,请使用:

re.compile("(\w)\1+")
re.findall("Hellokitty")

这会返回一个匹配元组。

【讨论】:

    【解决方案2】:

    你需要使用修饰符g进行全局匹配:

    /(\w)\1/g
    

    https://regex101.com/r/nW7vS1/1

    【讨论】:

      【解决方案3】:

      g 标志将使您的正则表达式 global 或重复。

      /(\w)\1+/g
      

      Demo


      如果你想让它避免重复三次,你可以删除+:

      /(\w)\1/g
      

      Demo

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-27
        • 2012-10-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多