【问题标题】:Regex: Match repeating digits ignoring of non-digits正则表达式:匹配重复数字忽略非数字
【发布时间】:2017-11-22 22:03:58
【问题描述】:

我有一个乱七八糟的电话号码列表,其中一些(可能是假的)始终包含相同的重复数字,但也可能包含其他标点符号、空格、字母等。如何使用 .NET RegEx 识别这些号码。这是一个例子:

00000000000000
(11)1111111111
22/ 222-2222222222
cell +33,333-3333-3333.
14 244-44444 Ext. 444

我需要正则表达式来匹配前 4 个,但不是最后一个有其他数字的。我的^(\d)\1+$ 抓住了第一个数字。我还尝试^([.-[\D]])\1+$ 来匹配不是非数字的重复字符。失败的。 ^(\d)(?:[\1-[\D]])+$ 也一样。一种简单的方法是使用\D 在一次传递中删除所有非数字,然后使用第一个正则表达式,但我不想创建对正则表达式引擎的 2 次调用(这些是 SQL Server 中昂贵的 CLR 调用) .

每行的输出是一个简单的布尔值 0-1。没有匹配时为0,匹配时为1:

1
1
1
1
0

更新: 稍微扩展一下这个问题。如果我想在正则表达式匹配时删除整行,那么替换正则表达式是什么?因此,替换正则表达式将返回 4 个空白行和一个原始行。我试图通过环视来做到这一点,但失败了。

【问题讨论】:

  • 你能告诉我们你的输出应该是什么样子吗?这样就很容易看到需要做什么
  • 这是一个匹配/不匹配的输出。因此,如果一行有匹配的字符串,则为 1,如果没有,则为 0。
  • 似乎有效。您可以将其发布为答案吗?

标签: .net regex phone-number


【解决方案1】:

你可以使用

^\D*(\d)(?:\D*\1)+\D*$

请参阅regex demo

详情

  • ^ - 字符串开头
  • \D* - 0+ 非数字
  • (\d) - 第 1 组:一个数字
  • (?:\D*\1)+ - 1 次或多次连续出现
    • \D* - 0+ 个非数字
    • \1 - 与第 1 组中捕获的数字相同
  • \D* - 0+ 非数字
  • $ - 字符串结束。

【讨论】:

  • 感谢维克托。它似乎也适用于我的替换正则表达式:)
猜你喜欢
  • 2022-10-12
  • 2019-10-15
  • 2016-03-30
  • 1970-01-01
  • 2013-08-13
  • 2021-10-07
  • 1970-01-01
  • 2021-01-31
  • 1970-01-01
相关资源
最近更新 更多