在遇到的第一个字母处停止的正则表达式

Regular expression that stops at first letter encountered

我希望我的正则表达式在遇到字母后停止匹配长度在 2 到 10 之间的数字。

到目前为止,我已经想出了 (\d{2,10})(?![a-zA-Z]) 这个。但即使在遇到字母后它也会继续匹配。 2216101225 /ROC/PL FCT DIN 24.03.2022 PL ERBICIDE' - 这是我一直在测试正则表达式的文本,但它也匹配 24 03 和 2022。 这已经过测试并适用于 C#。

你能帮忙吗?谢谢

您可以使用以下 .NET 正则表达式

(?<=^\P{L}*)(?<!\d)\d{2,10}(?!\d)
(?<=^[^a-zA-Z]*)(?<!\d)\d{2,10}(?!\d)

参见regex demo详情:

  • (?<=^\P{L}*) - 从当前位置到字符串开头必须没有字母((?<=^[^a-zA-Z]*) 仅支持 ASCII 字母)
  • (?<!\d) - 不允许紧靠左边的数字。
  • \d{2,10} - 二到十位数
  • (?!\d) - 不允许紧靠右边的数字。

另一种选择是锚定模式并匹配除字符 a-zA-Z 或换行符之外的任何字符,然后在捕获组中捕获 2-10 位数字。

然后从匹配中获取捕获组 1 的值。

^[^A-Za-z\r\n]*\b([0-9]{2,10})\b

说明

  • ^ 字符串开头
  • [^A-Za-z\r\n]* 可选择匹配 a-zA-Z 或换行符
  • 以外的字符
  • \b([0-9]{2,10})\b 在第 1 组的字边界之间捕获 2-10 个数字

看到一个regex demo


请注意,在 .NET 中 \d 匹配除 0-9 之外的所有数字。