我想匹配一个字符串,如19740103-0379或197401030379,即短划线是可选的。 如何使用regexp完成此操作?
答案 0 :(得分:8)
通常你可以使用-?
。或者,您可以使用-{0,1}
,但您应该会发现{0}支持“零或一次出现”几乎无处不在。
?
如果你想在任何地方接受带有任意数量破折号的12位数字,你可能需要做类似的事情:
pax> echo 19740103-0379 | egrep '19740103\-?0379'
19740103-0379
pax> echo 197401030379 | egrep '19740103\-?0379'
197401030379
基本上是零或更多的破折号,然后是12次出现(一个数字后面跟着零或更多破折号)并且会捕捉各种奇妙的东西,如:
-*([0-9]-*){12}
(当然,如果你的正则表达式引擎支持--3-53453---34-4534---
,你应该使用\d
代替[0-9]
。
答案 1 :(得分:1)
你可以试试不同的:
\d*
匹配仅由数字组成的字符串
\d*-\d*
匹配一串格式数字 - 破折号 - 数字
[0-9\-]*
匹配仅由短划线和数字组成的字符串
您可以通过|
(或)组合它们,以便您拥有(\d*)|(\d*-\d*)
:匹配格式只是数字和数字 - 破折号数字。