如何测试正则表达式匹配

38 投票
1 回答
58539 浏览
提问于 2025-04-16 10:17

我有一个字符串,我们叫它'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

re.match 只会在字符串的 开头 进行匹配。

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自包含标签,再继续进行。

撰写回答