簡體   English   中英

正則表達式查找字符串python

[英]Regex to find a string python

我有一個弦

<a href="/p/123411/"><img src="/p_img/411/123411/639469aa9f_123411_100.jpg" alt="ABCDXYZ" />

什么是在Python中找到ABCDXYZ的正則表達式

不要使用正則表達式來解析HTML。 使用BeautifulSoup

from bs4 import BeautifulSoup as BS
text = '''<a href="/p/123411/"><img src="/p_img/411/123411/639469aa9f_123411_100.jpg" alt="ABCDXYZ" />'''
soup = BS(text)
print soup.find('img').attrs['alt']

如果要查找該alt屬性的值,則可以執行以下操作:

>>> r = r'alt="(.*?)"'

然后:

>>> m = re.search(r, mystring)
>>> m.group(1)
'ABCDXYZ'

如果您想查找多個re.findall則可以使用re.findall

但是,此代碼很容易被類似以下內容所欺騙:

<span>Here's some text explaining how to do alt="foo" in an img tag.</span>

另一方面,它也將無法拾取如下內容:

<img src='/p_img/411/123411/639469aa9f_123411_100.jpg' alt='ABCDXYZ' />

你怎么處理那件事呢? 簡短的答案是:您不會。 XML和HTML不是常規語言。

值得在此指出的是,Python的re引擎實際上並不是真正的正則表達式引擎-最重要的是,它已嵌入圖靈完整的編程語言中。 因此,顯然可以圍繞Python和re構建HTML解析器。 這個答案顯示了用perl編寫的解析器的一部分,其中正則表達式完成了大部分繁重的工作。 但這並不意味着您應該這樣做。 鑒於已經存在完美的解析器,因此您不應該首先編寫解析器;如果確實存在,那么即使有更簡單的方法來執行所需的操作,也不應強迫自己使用正則表達式。 對於快速和骯臟的游戲,正則表達式很好。 對於生產程序,幾乎總是錯誤的答案。

要說服老板讓您使用解析器,一種方法是設計一套顯然有效的測試,而缺少完整解析器的任何基於正則表達式的解決方案都無法處理這些測試。 如果您能提出一個可以解析的測試,但是僅使用指數回溯,那么使用正則表達式需要12個小時,而使用bs4則需要0.1秒,甚至更好,但這有點棘手……

當然,這也值得尋找網上的文章(等等之類的問題這個這個和其他300名的DUP),並挑選最好的,以顯示你的老板。

如果您真的不能說服老板,那么到此為止。 鑒於已指定的內容,此方法可行。 給定實際可能想要或可能沒有的意圖,沒有什么念頭就行不通。 當您發現越來越多的現實案例失敗時,您可以通過在正則表達式本身上添加越來越復雜的變更和/或上下文來破解它,或者可能使用一系列正則表達式和后過濾器,直到最終獲得厭倦了它,找到了一份更好的工作。

首先,免責聲明:您不應該使用正則表達式來解析HTML 您可以為此使用BeautifulSoup

接下來,如果您實際上對使用正則表達式很認真,並且上面是您想要的確切情況,則可以執行以下操作:

<a href="[a-zA-Z0-9/]+"><img src="[a-zA-Z0-9/]+" alt="([a-zA-Z0-9/]+)" />

您可以通過match對象的groups屬性訪問文本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM