[英]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 Cents
的1
。 不知道這是怎么回事。
您可能會使用不太具體的正則表達式
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.