我正在使用 python 2.7 和BeautifulSoup。我需要找到诸如abc或abc之类的首字母缩写词,并避免像qweabcrty这样的误报。模式可以在字符串的开头,结尾,可以在前后有空格、引号、双引号、连字符(等等),但不能是字母数字字符。
我来这个正则表达式
[^\w]?a\.?b\.?c\.?[^\w]?
没关系
- 美国广播公司
- 美国广播公司
- 废话(美国广播公司)
- abc-blah
- 废话ABC
- 胡说八道
- 废话-abc-废话
但它也被发现(我不想):
- qweabcrty
如果我删除? 在两个[^\w]之后,它将不再找到案例 1、2、4 和 5,因为它希望在之前和/或之后找到一些东西。
长话短说,我该如何指定: abc 可以在字符串中,但如果在它之前和/或之后有一个字符,则它不能是字母数字字符。
python代码如下所示:
import re
from bs4 import BeautifulSoup, SoupStrainer
html = """
<html>
<a>abc</a>
<a>a.b.c.</a>
<a>blah (abc)</a>
<a>abc-blah</a>
<a>blah-abc</a>
<a>blah abc blah</a>
<a>blah-abc-blah</a>
<a>qweabcrty</a>
</html>"""
links = BeautifulSoup(html, "lxml", parse_only=SoupStrainer(["a"]))
tags = links.find_all("a", text = re.compile("[^\w]?a\.?b\.?c\.?[^\w]?", re.I))
print tags