从字符串中获取正好x位数的数字

时间:2013-03-09 14:11:03

标签: c# regex string match digit

我正在寻找一个正则表达式模式,它匹配一个长度正好为x的数字(比如说x是2-4)而不是其他。

示例:

"foo.bar 123 456789""foo.bar 456789 123"" 123""foo.bar123 "必须仅匹配“123”

因此。只有数字,没有空格,字母或其他东西。

我该怎么做?

编辑:我想在c#中使用Regex.Matches()函数来提取这个2-4位数字,并在附加代码中使用它。

2 个答案:

答案 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})\bexplained demo here
如果您想捕获单词旁边的匹配项:\D(\d{2,4})\Dexplained demo here

\b是一个单词边界(与任何东西都不匹配,它是一个零匹配字符)
\d仅匹配数字
\D匹配任何不是数字的字符 ()圆括号中的所有内容都会捕获匹配