首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >python RE vs html5 RE

python RE vs html5 RE
EN

Stack Overflow用户
提问于 2012-09-15 06:47:35
回答 3查看 184关注 0票数 0

似乎我在Python中遇到了一个bug:(Python2.7.3(默认,Apr 10 2012,23:24:47) MSC v.1500 64位(AMD64)在win32上)

代码语言:javascript
运行
复制
>>> re.match("0[5-7][5-9][0-9]{7}", "0775123456") #match
<_sre.SRE_Match object at 0x0000000002D3FC60>

>>> re.match("0[5-7][5-9][0-9]{7}", "077512345") #dont match

>>> re.match("0[5-7][5-9][0-9]{7}", "07751234567") #match!
<_sre.SRE_Match object at 0x0000000002D3F920>

>>> re.match("0[5-7][5-9][0-9]{7}","07751234567777777777777777777777777777777777777777777777") #match!!
<_sre.SRE_Match object at 0x0000000002D3FC60>

所以我必须使用美元符号来“精确地”限制数字!我认为这是一个错误,因为在HTML5验证中,{7}表示“确切”7位数字,而在python中,它似乎表示“至少”,下面是它使用美元符号时的表现:

代码语言:javascript
运行
复制
>>> re.match("0[5-7][5-9][0-9]{7}$", "0775123456") #match
<_sre.SRE_Match object at 0x0000000002D3F920>

>>> re.match("0[5-7][5-9][0-9]{7}$", "07751234567") #dont match

>>> re.match("0[5-7][5-9][0-9]{7}$", "077512345") #dont match

而这发生在所有其他正则表达式上,不仅仅是精确的数字匹配,还必须加上美元!

那么它是一个bug吗?或者这是设计出来的?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-09-15 06:53:57

这是设计好的。与re.search相反,re.match在字符串的开头匹配,后者匹配字符串中的任何位置。字符串后面的多余字符将被忽略。有关更多详细信息,请参阅http://docs.python.org/library/re.html#match

其他也使用正则表达式的语言,如grep和perl,行为也是一样的。正则表达式主要用于搜索文本。

如果您想执行精确匹配,则必须指定美元符号,正如您自己也注意到的那样。

票数 4
EN

Stack Overflow用户

发布于 2012-09-15 06:54:43

re.match()的文档说明:

如果字符串开头的零个或多个字符与正则表达式模式…匹配,则返回

(重点是我的。)

这意味着匹配完成后字符串中的所有字符都将被忽略。例如,下面的代码也可以:

代码语言:javascript
运行
复制
>>> re.match("0[5-7][5-9][0-9]{7}", "0775123456abc")
<_sre.SRE_Match at 0x10ee2e8b8>

正则表达式并不真正指定匹配必须锚定的位置。例如,Python也有re.search(),默认情况下,它也没有锚定在开头。您始终可以使用^$元字符显式指定锚定。

票数 2
EN

Stack Overflow用户

发布于 2012-09-15 06:56:37

正如其他人所说的..。不是bug,您的正则表达式没有清楚地说明为什么'$‘似乎可以修复它,但这个示例应该可以:

代码语言:javascript
运行
复制
import re

print 'food: ',
print re.match('fo{2}d', 'food')     # match found!

print 'fooood: ',
print re.match('fo{2}d', 'fooood')   # no match!

{}之后的任何内容都将为您提供您想要的行为,如果您希望字符串在数字之后结束,那么$是合适的添加内容。

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

https://stackoverflow.com/questions/12432934

复制
相关文章

相似问题

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