【问题标题】:RegEx for matching exactly N number正则表达式用于精确匹配 N 个数字
【发布时间】:2019-05-09 04:23:20
【问题描述】:

我有正则表达式工作

[\b\s\n\r\^][1-9][0-9]{3}[ -]?[0-9]{4}[\b\s]
来自网站https://regexr.com/

但它无法识别下一组中的前两个数字

1 2 3 4 5 6 7 8 1 2 3 4 - 5 6 7 8

它也不应该识别无效的。

有效

1 2 3 4 5 6 7 8 1 2 3 4 - 5 6 7 8 12345678 1234-1234

无效

1-18000-55113 01234567 09581300 1234567

【问题讨论】:

  • 我没有看到正确的模式。有效号码和无效号码的规则是什么? Here 是一个匹配所有有效并忽略所有无效的正则表达式,但我确定这不是你要找的。​​span>
  • 有效 [1 2 3 4 5 6 7 8] [1 2 3 4 - 5 6 7 8] [12345678] [1234-1234] 无效 [1-18000-55113] [01234567] [ 09581300] [1234567]
  • 先生,请帮帮忙,有效的应该承认,无效的应该是ingore
  • 规则是 --> 8位数字不以0开头,每个数字后面可以留有空格。并在 4 位后破折号。无效的是它不应以 0 开头且不超过 8 位。第一个数字后没有大字符。

标签: c# .net regex model-view-controller


【解决方案1】:

鉴于您的示例并查看您的正则表达式尝试,您可以使用此正则表达式,

^[1-9] *(?:\d *){3}(?:- *)?(?:\d *){4}$

说明:

  • ^ - 字符串开始
  • [1-9] * - 以数字 1 到 9 开头,后跟可选空格
  • (?:\d *){3} - 后跟任何数字,后跟可选空格,并且整个空格 3 次
  • (?:- *)? - 匹配四位数字后,可以选择后跟连字符 - 后跟可选空格
  • (?:\d *){4} - 后面还有四个数字,后面可以选择空格
  • $ - 字符串结束

Regex Demo 1

Working demo in regexr

编辑: 在 cmets 中提到,如果你想在更大的文本中找到这样的字符串,你可以使用下面的正则表达式,

\b[1-9] *(?:\d *){3}(?:- *)?(?:\d *){3}\d\b

Regex Demo 2

【讨论】:

  • 它适用于regex101.com,但不知何故我需要regexr.com
  • 它在 regex101.com 上工作,但不知何故我需要在 regexr.com 上 - Amol Saraf 23 秒前 编辑你能在 regexr.com 上试试吗 :( - Amol Saraf 刚刚编辑德
  • @AmolSaraf:它也适用于 regexr.com。它不起作用,因为您没有启用multiline 模式。我在那里启用了它,它的working on regexr.com
  • 您能否将上述工作正则表达式转换为 [\b\s\n\r\^][1-9][0-9]{3}[ -] 之类的格式?[0 -9]{4}[\b\s] 这对先生很有帮助...
  • 我正在使用 VBscript 代码,但不知何故它不适用于 * 和 $ ...,因为该字段是数字...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多