[英]Python: regex for exclude string/word in multiline input
我在嘗試使用Python 2.7.3正則表達式嘗試在帶有換行符的大型輸入中查找某些字符串時遇到問題。 我有這樣的事情:
type="thing" blahblahblah
something id="123456"
...
type="disabled thing" blahblahblah
somethingelse id="123457"
...
我想在type =“ thing”中獲取所有ID。 由於貪婪的正則表達式引擎,我必須編寫如下正則表達式:
r'type="thing"(?!type).+id="[0-9]{6,7}"', re.S
但是,這不起作用。 如何在輸入時使用此類數據制作排除字符串正則表達式?
如果我正確理解了您的問題(在進行編輯之前),則您希望這兩行都與一個ID相關聯。 在這種情況下,您將需要以下幾行內容(假設新行用“ \\ n”標記):
>>> import re
>>> t = """
type="thing" blahblahblah
something id="123456"
...
type="disabled thing" blahblahblah
somethingelse id="123457"
...
"""
>>> q = re.compile(r'type="thing".*\n.*\n')
>>> q.findall(t)
['type="thing" blahblahblah\nsomething id="123456"\n']
>>> for s in q.findall(t):
print s
type="thing" blahblahblah
something id="123456"
如果您不使用re.S,則可以更有效地控制表情的貪婪感。 您的.+
與re.S
結合將使您的表情貪婪,否則您將不得不對此加以考慮。 您還可以使用類似.+?
。 加號后的問號會使您的表達不貪婪,但我會選擇更簡潔的表達。
用這個:
r'type="thing"[\s\S]+?id="([0-9]{6,7})"', re.S
例:
import re
s = b'''"type="thing" blahblahblah
something id="123456"
....
type="thing" blahblahblah
something id="123459"
....
type="disabled thing" blahblahblah
somethingelse id="123457"'''
expr = re.compile(r'type="thing"[\s\S]+?id="([0-9]{6,7})"', re.S);
c = expr.findall(s)
for c1 in c:
print ".."
print c1
輸出:
>>>
..
123456
..
123459
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.