3
我正在使用python 2.7和BeautifulSoup。 我需要找到一個首字母縮略詞,例如abc或a.b.c.並避免像qweabcrty這樣的假陽性。該模式可以在字符串的開頭,最後可以在前後有空格,引號,雙引號,連字符(等等),但不能是字母數字字符。尋找首字母縮寫詞的正則表達式,避免由該模式組成的詞
我來到這個正則表達式
[^\w]?a\.?b\.?c\.?[^\w]?
這是確定的
- ABC
- A.B.C.
- 等等(ABC)
- ABC-等等
- 等等-ABC
- 等等ABC等等
- 等等-ABC-等等
但它也發現(我不想):
- qweabcrty
如果我刪除了?之後[^ \ w]它不會再找到案例1,2,4和5,因爲它期望在之前和/或之後找到某些內容。
長話短說,我怎麼可以指定此: ABC可以anywere串的,但如果有一個人物之前和/或之後它不能是字母數字的。
的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
謝謝,似乎工作,我問!只是一個問題:你爲什麼用_(abc | a \。\ b。\。c)_而不是_(a \。?\ b.?\.c?)_?它更快? – Luca
@Luca:在我看來,這看起來更具可讀性 – georg