Python 正则表达式 findall 有效,但匹配不 [重复]

Posted

技术标签:

【中文标题】Python 正则表达式 findall 有效,但匹配不 [重复]【英文标题】:Python regex findall works but match does not [duplicate] 【发布时间】:2015-01-27 16:48:18 【问题描述】:

我正在 IPython 中对此进行测试。变量t 是从字典中的文本设置并返回:

u'http://www.amazon.com/dp/B003T0G9GM/ref=wl_it_dp_v_nS_ttl/177-5611794-0982247?_encoding=UTF8&colid=SBGZJRGMR8TA&coliid=I205LCXDIRSLL3'

使用此代码:

r = r'amazon\.com/dp/(\w10)' 
m = re.findall(r,t)

匹配正确,m 返回[u'B003T0G9GM']

使用此代码,

p = re.compile(r)
m = p.match(t)

m 返回None

阅读本文档后,这对我来说似乎是正确的。 https://docs.python.org/2/howto/regex.html#grouping

在 IPython 中尝试之前,我还在这里进行了测试以验证正则表达式 http://regex101.com/r/gG8eQ2/1

我错过了什么?

【问题讨论】:

match 从字符串的开头匹配,您可能需要 search 代替。见What is the difference between Python's re.search and re.match?。 【参考方案1】:

应该使用search,不匹配。这是你应该拥有的:

p = re.compile(r)
m = p.search(t)
if m: print(m.group(1)) # gives: B003T0G9GM

Match 只检查字符串的开头。搜索整个字符串。

【讨论】:

以上是关于Python 正则表达式 findall 有效,但匹配不 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

python:非正则表达式等价于 re.findall

Python正则表达式之findall疑点

python - 正则表达式搜索和 findall

正则表达式 findall start() 和 end() ? Python

python 正则表达式匹配次数 findall 用法

网络爬虫findall()正则(.*?)不起作用,无返回