如何测试正则表达式匹配

jml*_*jml 22 python regex

我有一个字符串.我们称之为'测试'.我想测试一个匹配这个字符串,但只使用正则表达式的backref.

我可以这样做:

进口重新

for line in f.readlines():
   if '<a href' in line:
      if re.match('<a href="(.*)">', line) == 'test':
         print 'matched!'
Run Code Online (Sandbox Code Playgroud)

?这当然似乎不起作用,但我认为我可能会接近?基本上问题是我怎样才能重新只返回backref进行比较?

mou*_*uad 23

re.match仅匹配字符串的开头.

def url_match(line, url):
    match = re.match(r'<a href="(?P<url>[^"]*?)"', line)
    return match and match.groupdict()['url'] == url:
Run Code Online (Sandbox Code Playgroud)

示例用法:

>>> url_match('<a href="test">', 'test')
True
>>> url_match('<a href="test">', 'te')
False
>>> url_match('this is a <a href="test">', 'test')
False
Run Code Online (Sandbox Code Playgroud)

如果模式可能出现在行中的任何位置,请使用re.search.

def url_search(line, url):
    match = re.search(r'<a href="(?P<url>[^"]*?)"', line)
    return match and match.groupdict()['url'] == url:
Run Code Online (Sandbox Code Playgroud)

示例用法:

>>> url_search('<a href="test">', 'test')
True
>>> url_search('<a href="test">', 'te')
False
>>> url_search('this is a <a href="test">', 'test')
True
Run Code Online (Sandbox Code Playgroud)

注意:如果您尝试使用正则表达式解析HTML,请在继续之前阅读除XHTML自包含标记之外的RegEx匹配开放标记.

  • +1使用正则表达式解析HTML非常值得清醒的建议. (6认同)