簡體   English   中英

Python中的正則表達式,用於匹配()中的內容

[英]Regex in Python for matching contents inside ()

我想匹配括號內的內容(一個帶有“ per contract”,但在第三行中省略未加修飾的元素,例如“ =“),如下所示:

1/100 of a cent ($0.0001) per pound ($6.00 per contract) and 
.001 Index point (10 Cents per contract) and 
$.00025 per pound (=$10 per contract)

我正在使用以下正則表達式:

r'.*?\([^$]*([\$|\d][^)]* per contract)\)'

這對於括號內以$開頭的任何表達式都適用,但是對於第二行,它忽略了10 Cents1 不知道這是怎么回事。

您可能會使用不太具體的正則表達式

re.findall(r'\(([^)]+) per contract\)', str)

這將與“ $ 6.00”和“ 10美分”相匹配。

對於第二行,它忽略了10分中的1分。 不知道這是怎么回事。

發生的是[^$]*是貪婪的:它將很高興地匹配數字,並只保留一位數字以滿足其后的[\\$|\\d] (因此,如果您寫了(199 cents您只會得到9 )。而是通過寫[^$]*?來解決它:

r'.*?\([^$]*?([\$|\d][^)]* per contract)\)'

您可以使用:

r'(?<=\()[^=][^)]*? per contract(?=\))'

這將與您在注釋中指定的輸出匹配:

re.search('\((([^)]+) per contract)\)', str).group(1)

暫無
暫無

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

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