首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于数字行和可选dash+digits的Python。为什么不匹配呢?

用于数字行和可选dash+digits的Python。为什么不匹配呢?
EN

Stack Overflow用户
提问于 2014-02-24 16:45:13
回答 3查看 2.1K关注 0票数 6

我为这件事挣扎了很长时间,所以我来这里寻求帮助。

我想匹配所有字符串,其中有一个数字,后面跟着一个可选的破折号,后面跟着更多的数字。

示例:

代码语言:javascript
复制
#Match
1
34-1
2-5-2
15-2-3-309-1

# Don't match
1--
--
#$@%^#$@#
dafadf
10-asdf-1
-12-1-

我从这个正则表达式开始(一个或多个数字,可选地后面跟着一个破折号和一个或多个数字):

代码语言:javascript
复制
\d+(-\d+)*

那不管用。然后,我尝试在\d周围插入

代码语言:javascript
复制
(\d)+(-(\d)+)*

那也没用。有人能帮我吗?

EN

回答 3

Stack Overflow用户

发布于 2014-02-24 16:53:19

下面是我构建的涵盖所有阳性测试用例的regex;规则集是python:

代码语言:javascript
复制
^(?=\d)([-\d]+)*(?<=\d)$

Debuggex Demo

基本上,有一个前瞻性,以确保它开始一个数字在开始。这里有一个查找,以确保它也以一个数字结尾,并且中间的每个捕获组都严格由数字和连字符组成。

票数 1
EN

Stack Overflow用户

发布于 2014-02-24 16:57:21

这应该可以做到:

代码语言:javascript
复制
^((?:\d+(?:-|$))+)$

工作正则表达式示例:

http://regex101.com/r/sD0oL7

票数 1
EN

Stack Overflow用户

发布于 2014-02-24 17:14:51

您的原始regex对于您为示例提供的输入似乎运行良好,但有一个警告:您需要使用任何一个行开始(^)和行尾($)锚,或者指定完整的行匹配,而不是使用字符串搜索来隐式地使用^和$来括住regex。(即re.match()与re.search()在Python中的比较)

其他的例子都很好,但是^$才是真正要做的。

干杯。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21993713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档