在遇到的第一个字母处停止的正则表达式
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 之外的所有数字。
我希望我的正则表达式在遇到字母后停止匹配长度在 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 之外的所有数字。