我想匹配括号内的内容(一个用“每个合约”,但在第三行中省略未编辑的元素,如“=”),如下所示:
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)\)'
这适用于以$
开头的括号内的任何表达式,但对于第二行,它忽略1
中的10 Cents
。不确定这里发生了什么。
答案 0 :(得分:2)
您可能使用不太具体的正则表达式
re.findall(r'\(([^)]+) per contract\)', str)
这将匹配“$ 6.00”和“10 Cents。”
答案 1 :(得分:1)
对于第二行,它从10分中省略了1。不确定这里发生了什么。
正在发生的事情是[^$]*
是贪婪的:它会愉快地匹配数字,并且只留下一个数字来满足跟随它的[\$|\d]
。 (所以,如果你写了(199 cents
,你只能获得9
)。通过编写[^$]*?
来修复它:
r'.*?\([^$]*?([\$|\d][^)]* per contract)\)'
答案 2 :(得分:0)
您可以使用:
r'(?<=\()[^=][^)]*? per contract(?=\))'
答案 3 :(得分:0)
这将与您在评论中指定的输出相匹配:
re.search('\((([^)]+) per contract)\)', str).group(1)