【问题标题】:regular expression not working: repeated strings of digits正则表达式不起作用:重复的数字字符串
【发布时间】:2015-06-12 05:36:02
【问题描述】:

我试图创建一个正则表达式来查找重复的数字字符串。 例如:

1     -not matching
11    -matching
122   -matching
1234  -not matching

我使用的是\d+。教程告诉你

“+”与“*”类似,但需要至少重复一次。

但是当我尝试它与任何数字匹配时。知道为什么吗?

更新 我试过的教程:http://www.codeproject.com/Articles/9099/The-Minute-Regex-Tutorial

【问题讨论】:

  • 你能把这么说的教程链接起来吗?
  • 我已经添加了相关教程的链接

标签: c# regex winforms


【解决方案1】:

正则表达式中的重复结构,+*{x},不重复“你第一次发现的东西”,它们重复“发现东西的模式”。

所以这个:

\d+

不会找到一个数字,然后匹配该数字的序列,而是首先找到一个数字,然后尝试找到另一个数字,然后再寻找另一个,等等。

如果您希望它重复“发现了什么”,您必须明确说明:

(\d)\1+

这里的\1 表示“我将再次匹配第一组中的任何内容”,这个正则表达式应该匹配相同数字的序列,而不是数字的序列 em>。

【讨论】:

    【解决方案2】:
    ^\d*(\d)\1+\d*$
    

    您可以使用这个。参见演示。\d+ 将匹配任何整数 1 or more time。您需要使用 \1 来查找重复数字。

    https://regex101.com/r/hI0qP0/4

    【讨论】:

      【解决方案3】:

      它工作正常。 \d+ 不是特定数字的重复,它是一个或多个 \d 的重复。 \d+ 将匹配 1(一位或多位)、12(一位或多位)、122(一位或多位)......你明白了。如果你想看到两个或更多的重复,你需要说\d\d+\d{2,}——但这也表示你想要两个或更多的数字,而不是两个或更多的相同数字。要这么说,您需要反向引用:(\d)\1+ 是两个或多个相同数字:我们记住的一个数字,然后是一个或多个记住的东西。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-01
        • 1970-01-01
        • 2017-10-27
        • 2018-06-19
        相关资源
        最近更新 更多