我正在寻找一个正则表达式模式,它匹配一个长度正好为x的数字(比如说x是2-4)而不是其他。
示例:
"foo.bar 123 456789"
,"foo.bar 456789 123"
," 123"
,"foo.bar123 "
必须仅匹配“123”
因此。只有数字,没有空格,字母或其他东西。
我该怎么做?
编辑:我想在c#中使用Regex.Matches()函数来提取这个2-4位数字,并在附加代码中使用它。
答案 0 :(得分:1)
后跟{m,n}
的任何模式都允许模式发生m到n次。因此,在您的情况\d{m,n}
中,需要m和n的值。如果必须是整数,请使用\d{m}
如果您想匹配x123y中的123而不是1234中的123,请使用\d{3}(?=\D|$)(?<=(\D|^)\d{3})
它有一个展望未来,以确保3位数后面的字符完全是非digitornothing,并看看后面是确保3位数字之前的字符是非数字或根本没有。
答案 1 :(得分:1)
您可以使用基本的RegEx实现此目的:
\b(\d\d\d)\b
或\b(\d{3})\b
- 用于匹配正好3位数的数字
如果您想要可变数字:\b(\d{2,4})\b
(explained demo here)
如果您想捕获单词旁边的匹配项:\D(\d{2,4})\D
(explained demo here)
\b
是一个单词边界(与任何东西都不匹配,它是一个零匹配字符)
\d
仅匹配数字
\D
匹配任何不是数字的字符
()
圆括号中的所有内容都会捕获匹配