0

我想匹配括号内的内容(一个带有“每个合同”的内容,但省略第三行中的“=”等不需要的元素),如下所示:

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)\)'

这适用于括号内以 a 开头的任何表达式$,但对于第二行,它省略了1from 10 Cents。不知道这里发生了什么。

4

4 回答 4

2

您可能可以使用不太具体的正则表达式

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

这将匹配“$6.00”和“10 Cents”。

于 2013-05-29T21:37:44.467 回答
1

对于第二行,它从 10 Cents 中省略了 1。不知道这里发生了什么。

发生的事情[^$]*是贪婪的:它会愉快地匹配数字,只留下一个数字来满足[\$|\d]它后面的。(所以,如果你写了(199 cents你只会得到9)。通过编写[^$]*?来修复它:

r'.*?\([^$]*?([\$|\d][^)]* per contract)\)'
于 2013-05-29T21:53:37.867 回答
0

您可以使用:

r'(?<=\()[^=][^)]*? per contract(?=\))'
于 2013-05-29T21:40:58.980 回答
0

这将匹配您在评论中指定的输出:

re.search('\((([^)]+) per contract)\)', str).group(1)
于 2013-05-29T21:47:41.397 回答