我正在尝试创建一个正则表达式来匹配任何具有9位数的字符串。数字可以存在于字符串中的任何位置。
例如,如果你传入以下字符串,你会得到一个匹配: 123456789 123aeiou456abc789
这些字符串无法提供匹配 12345678 1234567890
答案 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)
答案 2 :(得分:0)
这是我的看法:^[^0-9]*[0-9]{9}[^0-9]*$
FWIW,有一个很酷的小应用程序可以帮助你构建RegEx,它将解析它们并用简单的英语解释你的表达式做了什么,并提供一个实际的UI来帮助你添加你可能不太熟悉的表达式。 Check out Expresso