如何测试正则表达式匹配
我有一个字符串,我们叫它'test'。我想用正则表达式来测试这个字符串的匹配情况,但我只想用到正则表达式中的反向引用。
我能不能这样做:
import re
for line in f.readlines():
if '<a href' in line:
if re.match('<a href="(.*)">', line) == 'test':
print 'matched!'
?
当然,这样似乎不太行,但我觉得我可能快到了?
基本上,我想问的是,如何让re只返回反向引用,以便进行比较?
1 个回答
44
def url_match(line, url):
match = re.match(r'<a href="(?P<url>[^"]*?)"', line)
return match and match.groupdict()['url'] == url:
使用示例:
>>> url_match('<a href="test">', 'test')
True
>>> url_match('<a href="test">', 'te')
False
>>> url_match('this is a <a href="test">', 'test')
False
如果你想要查找的模式可能出现在行的任何位置,可以使用 re.search
。
def url_search(line, url):
match = re.search(r'<a href="(?P<url>[^"]*?)"', line)
return match and match.groupdict()['url'] == url:
使用示例:
>>> url_search('<a href="test">', 'test')
True
>>> url_search('<a href="test">', 'te')
False
>>> url_search('this is a <a href="test">', 'test')
True
注意:如果你打算用正则表达式解析HTML,建议先阅读 正则表达式匹配打开标签,除了XHTML自包含标签,再继续进行。