例如,我想要兩個冒號之間的內容,但是我需要從最後匹配,因爲之前的內容可能有冒號並弄亂了事情。正則表達式匹配從文件結尾開始的2個符號之間的任何內容?
的東西,使用冒號:
別的東西,它使用一個冒號:
:IWantWhatIsInHere:
東西
東西
例如,我想要兩個冒號之間的內容,但是我需要從最後匹配,因爲之前的內容可能有冒號並弄亂了事情。正則表達式匹配從文件結尾開始的2個符號之間的任何內容?
的東西,使用冒號:
別的東西,它使用一個冒號:
:IWantWhatIsInHere:
東西
東西
以下應該工作,假設你有一個名爲text
的字符串:
import re
data = re.search(r'.*:([^:]*):', text, re.DOTALL).group(1)
貪婪.*
在正則表達式開始時確保您的匹配將從最後的:
開始,以滿足您的「從文件末尾」的要求。 re.DOTALL
標誌在那裏,因此.*
也可以匹配換行符。
正則表達式的:([^:]*):
部分是在那裏你會真正匹配「IWantWhatIsInHere」,[^:]*
的意思是「匹配任何數量的不:
人物」,和括號將匹配保存到一個捕獲組。
當我們找到匹配後,我們將其稱爲group(1)
以獲取第一個捕獲組的內容,這將是您想要的數據。
這很好用,謝謝。我可以問一下正則表達式的含義嗎? – Joren
'r'在一個字符串之前意味着它是一個「原始字符串」。這可以防止諸如「\ n」這樣的轉義序列被轉換成其他東西。如果你使用'print r'\ n',它會打印一個反斜槓和一個'n'而不是僅僅打印一個換行符。因爲你經常需要的所有'''',所以使用原始字符串作爲正則表達式是一個好習慣 –
這工作:
>>> tgt='''\
... something that uses a colon:
...
... something else that uses a colon:
...
... :IWantWhatIsInHere:
...
... something
...
... something'''
>>> re.search(r':([^:]*):[^:]*$',tgt,re.DOTALL).group(1)
'IWantWhatIsInHere'
它works與線錨結束。
確切的問題是什麼?標題種類與示例無關.. – Dropout
你說得對,我澄清了(我認爲) – Joren