【发布时间】:2013-02-12 17:37:11
【问题描述】:
我正在尝试使用正则表达式匹配一个短语,只要该短语中的任何单词都没有出现在 html 标记中。
对于这个例子,我使用的是以下网址:
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)为什么对于第一个正则表达式,我没有得到实际匹配?
最后,
我该如何解决这个问题?
提前感谢您的帮助。
【问题讨论】:
-
你想从给定的网站上获取什么信息?你应该只使用正则表达式吗?
-
我可以随心所欲地做到这一点。我一直在做另一种方式,没有使用正则表达式,这是一个非常耗时的过程。我决定改用正则表达式,因为我认为我可以让它更快。基本上,我想取任何短语,并找出它是否存在于页面中(只要它存在于 html 之外)。因此,如果我发送“我喜欢狗,但不喜欢猫”,我想知道页面上是否存在该短语。所以,我的正则表达式可能看起来像这样:“I(?!([^).+?like(?!([^).+?dogs..... "
-
你检查过美丽的汤吗?它是一个解析 html 的 python 库,它有一个名为 get_text() 的特定函数,可以删除 html 标签。在搜索文本之前删除标签可能更容易。
-
我希望它从 html 页面返回文本的实际部分,这样我就可以获得开始和结束位置。如果我修改 html 页面,我的结果位置将不正确。