我想我看到了你遇到的问题。如果您的客户编号与其他内容一起包含在字符串中,则您的模式不起作用。同时指定\A
和\Z
意味着您的客户编号必须从字符串的开头开始并在字符串的结尾结束才能进行匹配。\A
就像^
匹配字符串的开头和匹配字符串的结尾\Z
一样$
——除了它们忽略是否MultiLine
指定了选项。
尝试使用这种模式:\b\d{5}-\d{2}\b
仅当客户编号位于字母数字字符和非字母数字字符之间时,它才会匹配您的客户编号。这也意味着您可以找到客户编号,即使它们不是仅由空格分隔,如以下LINQPad脚本中的最后一个测试用例所示。
const string pattern = @"\b\d{5}-\d{2}\b";
Regex.IsMatch("12345", pattern).Dump(); // no match
Regex.IsMatch("12345-12", pattern).Dump(); // match
Regex.IsMatch("12345-1234", pattern).Dump(); // no match
Regex.IsMatch("word 12345 word", pattern).Dump(); // no match
Regex.IsMatch("word 12345-12 word", pattern).Dump(); // match
Regex.IsMatch("word 12345-1234 word", pattern).Dump(); // no match
Regex.IsMatch("word@12345-12@word", pattern).Dump(); // match