我为这件事挣扎了很长时间,所以我来这里寻求帮助。
我想匹配所有字符串,其中有一个数字,后面跟着一个可选的破折号,后面跟着更多的数字。
示例:
#Match
1
34-1
2-5-2
15-2-3-309-1
# Don't match
1--
--
#$@%^#$@#
dafadf
10-asdf-1
-12-1-我从这个正则表达式开始(一个或多个数字,可选地后面跟着一个破折号和一个或多个数字):
\d+(-\d+)*那不管用。然后,我尝试在\d周围插入
(\d)+(-(\d)+)*那也没用。有人能帮我吗?
发布于 2014-02-24 16:53:19
下面是我构建的涵盖所有阳性测试用例的regex;规则集是python:
^(?=\d)([-\d]+)*(?<=\d)$

基本上,有一个前瞻性,以确保它开始一个数字在开始。这里有一个查找,以确保它也以一个数字结尾,并且中间的每个捕获组都严格由数字和连字符组成。
发布于 2014-02-24 16:57:21
这应该可以做到:
^((?:\d+(?:-|$))+)$工作正则表达式示例:
http://regex101.com/r/sD0oL7
发布于 2014-02-24 17:14:51
您的原始regex对于您为示例提供的输入似乎运行良好,但有一个警告:您需要使用任何一个行开始(^)和行尾($)锚,或者指定完整的行匹配,而不是使用字符串搜索来隐式地使用^和$来括住regex。(即re.match()与re.search()在Python中的比较)
其他的例子都很好,但是^$才是真正要做的。
干杯。
https://stackoverflow.com/questions/21993713
复制相似问题