我正在使用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....
答案 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}
只是为了一个“固定”版本的演示。)