使用.NET正则表达式,匹配任何字符串正好9位数

时间:2010-05-21 16:26:31

标签: .net regex

我正在尝试创建一个正则表达式来匹配任何具有9位数的字符串。数字可以存在于字符串中的任何位置。

例如,如果你传入以下字符串,你会得到一个匹配: 123456789 123aeiou456abc789

这些字符串无法提供匹配 12345678 1234567890

3 个答案:

答案 0 :(得分:8)

试试这个:

@"^(\D*\d){9}\D*$"

或使用此改进版本。它假定您只想匹配0-9而不是其他语言中代表数字的其他字符。它还使用非捕获组来提高性能:

"^(?:[^0-9]*[0-9]){9}[^0-9]*$"

以下是故事的细分:

^        Start of string.
(?:      Start a non-capturing group.
[^0-9]*  Match zero or more non-digits.
[0-9]    Match exactly one digit.
)        Close the group.
{9}      Repeat the group exactly 9 times.
[^0-9]*  Match zero or more non-digits.
$        End of string.

这是一个测试床:

string regex = "^(?:[^0-9]*[0-9]){9}[^0-9]*$"
string[] tests = {
                     "123456789",
                     "123aeiou456abc789",
                     "12345678",
                     "1234567890"
                 };
foreach (string test in tests)
{
    bool isMatch = Regex.IsMatch(test, regex); 
    Console.WriteLine("{0}: {1}", test, isMatch);
}

结果:

123456789: True
123aeiou456abc789: True
12345678: False
1234567890: False

答案 1 :(得分:1)

查看网站

http://www.regexlib.com/CheatSheet.aspx

我发现它非常有帮助。

答案 2 :(得分:0)

这是我的看法:^[^0-9]*[0-9]{9}[^0-9]*$

FWIW,有一个很酷的小应用程序可以帮助你构建RegEx,它将解析它们并用简单的英语解释你的表达式做了什么,并提供一个实际的UI来帮助你添加你可能不太熟悉的表达式。 Check out Expresso