C#正则表达式中的错误

时间:2015-08-21 12:52:59

标签: c# regex

我正在使用C#2012,我无法解决这个正则表达式。

我需要验证文本,以便点或跟踪是强制性的,以分隔输入文本中的数字:
[0-9] {9}( - |。)[\ s]的[0-9] {4}( - |。)[0-9] {4}( - |。)0-9 [0-9] {2}( - |。)[0-9] {4}

有效文本如下:
0706570-39.2014.8.02.0001

但上面的表达式返回true给下面的文本,尽管它应该是false:
...CertidãodeCasamentoº00287301551 982200032250000901391 - CartórioPrivativo....

2 个答案:

答案 0 :(得分:1)

^[0-9]{9}(-|\.)[\s]?[0-9]{4}(-|\.)[0-9]{4}(-|\.)0-9[0-9]{2}(-|\.)[0-9]{4}$

添加锚^...$以表示字符串的开头和结尾。也逃避.

答案 1 :(得分:1)

您需要使用以下正则表达式:

\b[0-9]{7}[-.][0-9]{2}[-.][0-9]{4}[-.][0-9][.-][0-9]{2}[-.][0-9]{4}\b

请参阅demo

如果表达式必须与单个完整字符串匹配,请将\b...\b替换为^...$

请注意,由于(-|.).匹配,因此-毫无意义,因此您的意图是匹配文字.。要匹配文字.,您需要将其转义(如vks所示),或将其放入字符类[.]中。字符类在这里是一种更有效的解决方案,因为与使用交替|运算符相比,回溯要少得多。无论如何,原始表达式匹配不同的数字组(请参阅[0-9]{7}(-|\.)\s?[0-9]{2}(-|\.)[0-9]{4}(-|\.)[0-9]{1}(-|\.)[0-9]{2}(-|\.)[0-9]{4}只是为了一个“固定”版本的演示。)