用于匹配内容的Python中的正则表达式()

时间:2013-05-29 21:28:16

标签: python regex

我想匹配括号内的内容(一个用“每个合约”,但在第三行中省略未编辑的元素,如“=”),如下所示:

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。不确定这里发生了什么。

4 个答案:

答案 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)