【问题标题】:Regex to match a number sequence like 1 2 3正则表达式匹配数字序列,如 1 2 3
【发布时间】:2016-12-06 16:14:26
【问题描述】:

我想捕获像 1 2 345 78 63 这样的数字序列。我一直在尝试创建一个匹配序列的正则表达式。

我设法写了一个正则表达式模式(\b\d+\b\s){3,}

但上述模式匹配1 2 3 而不是45 78 63。我的模式的另一个问题是捕获的组包含一个尾随空格字符。

【问题讨论】:

  • \d+\s\d+\s\d+
  • @AlfieGoodacre 实际上它会匹配 1 2 3 但如果序列位于行尾,它将无法捕获最后一个数字。

标签: c# regex


【解决方案1】:

\d+\s\d+(\s\d+)+ 似乎更简单

您可以在regex101 上进行测试。

【讨论】:

  • 如果我使用字符串 1 2 3 and 42 45 46 它返回 1 2 3 , 42 45 4
  • @AmatuerDev 错过了一个加分
  • 嗯,我想我得到了我需要的东西。谢谢尤里
  • @AmatuerDev np.
【解决方案2】:

另一个变种是

 (\s?(\d+)\s?){3}

这是RegEx_Com test

要摆脱尾随空格,您可以使用String.Trim() 方法:

string res = Regex.Match(teststring, @"(\s?(\d+)\s?){3}").Value.Trim();

【讨论】:

    【解决方案3】:

    我将为那些不需要匹配纯数字并且不想要冗长的简单粗暴解决方案的人回答一个更复杂的示例。

    以下正则表达式:

    ^([01]?[0-9]|2[1-9]|3[0-2])[0-9]{7}$
    

    将匹配必须为 9 位的银行帐户路由号码,但前 2 位具有以下顺序接受要求。

    00 到 12 要么 21 至 32

    例如 004444444、001234567 和 314444444 是好的,但 204444444 不是

    【讨论】:

      猜你喜欢
      • 2019-10-10
      • 2018-01-09
      • 1970-01-01
      • 1970-01-01
      • 2012-05-04
      • 2021-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多