gpt4 book ai didi

python - python中的正则表达式,匹配html标签之外的词

转载 作者:太空宇宙 更新时间:2023-11-04 10:49:11 24 4
gpt4 key购买 nike

我正在尝试使用正则表达式匹配一个短语,只要该短语中的任何单词都没有出现在 html 标记中即可。

对于此示例,我使用以下 url:

   url = "http://www.sidley.com/people/results.aspx?lastname=B" 

我使用的正则表达式是:

   regexp = "Babb(?!([^<]+)?>).+?Jonathan(?!([^<]+)?>).+?C(?!([^<]+)?>)"
page = urllib2.urlopen(url).read()
re.findall(regexp, page, re.DOTALL)

使用该正则表达式,我得到以下输出:

   [('', '', '')]

当我将正则表达式更改为(*注意外括号)时:

   regexp = "(Babb(?!([^<]+)?>).+?Jonathan(?!([^<]+)?>).+?C(?!([^<]+)?>))"
page = urllib2.urlopen(url).read()
re.findall(regexp, page, re.DOTALL)

我得到:

   [('Babb, Jonathan C', '', '', '')]

我很困惑为什么会这样。

1) 为什么我得到这些空字符串作为匹配项?2) 为什么对于第一个正则表达式,我没有得到实际匹配?

最后,

我该如何解决这个问题?

预先感谢您的帮助。

最佳答案

你得到空字符串的原因是你使用了非贪婪。如果您不需要该信息,只需删除一些括号即可。事实上,您真的应该研究非分组括号或只是一些无关的对。


我将使用的最终代码(用于整个过程)是

import re
import urllib2


url = 'http://www.sidley.com/people/results.aspx?lastname=B'
regexp = 'Babb(?!<+?>).+?Jonathan(?!<+?>).+?C(?!<+?>)'

page = urllib2.urlopen(url).read()
re.findall(regexp, page, re.DOTALL)

正则表达式的分解:

  • 我们选择第一个词。 Babb
  • 我们不想匹配任何 HTML 标签,所以我们使用 must-not-match 反组。 (?!)
  • 在其中,我们放置了一个用于选择 HTML 标记的正则表达式(不太清楚为什么是这个特定的表达式而不是 .+?> 起作用)。 <+?>
  • 我们选择至少一个字符,非贪婪的。 .+?
  • 我们对每个其他词(JonathanC)重复这个过程。

关于python - python中的正则表达式,匹配html标签之外的词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15103181/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com