Python中用于匹配()内内容的正则表达式
我想匹配括号内的内容(其中一个带有“per contract”,但在第3行中省略了“=”等未加修饰的元素),如下所示:Python中用于匹配()内内容的正则表达式,python,regex,Python,Regex,我想匹配括号内的内容(其中一个带有“per contract”,但在第3行中省略了“=”等未加修饰的元素),如下所示: 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
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美分中的1
。不确定这里发生了什么。您可能可以使用不太具体的正则表达式
re.findall(r'\(([^)]+) per contract\)', str)
这将与“$6.00”和“10美分”匹配。您可能可以使用不太具体的正则表达式
re.findall(r'\(([^)]+) per contract\)', str)
这将匹配“$6.00”和“10美分”。您可以使用:
r'(?<=\()[^=][^)]*? per contract(?=\))'
r'(?您可以使用:
r'(?<=\()[^=][^)]*? per contract(?=\))'
r'(?这将匹配您在注释中指定的输出:
re.search('\((([^)]+) per contract)\)', str).group(1)
这将与您在评论中指定的输出相匹配:
re.search('\((([^)]+) per contract)\)', str).group(1)
对于第二行,它省略了10美分中的1。不确定这里发生了什么
发生的事情是,[^$]*
是贪婪的:它会很高兴地匹配数字,只留下一个数字来满足它后面的[\$\d]
(因此,如果你写(199美分
,你只会得到9
)。通过写[^$]*?
来解决它:
r'.*?\([^$]*?([\$|\d][^)]* per contract)\)'
对于第二行,它省略了10美分中的1。不确定这里发生了什么
发生的事情是,[^$]*
是贪婪的:它会很高兴地匹配数字,只留下一个数字来满足它后面的[\$\d]
(因此,如果你写(199美分
,你只会得到9
)。通过写[^$]*?
来解决它:
r'.*?\([^$]*?([\$|\d][^)]* per contract)\)'
该文本的预期输出是什么?您是打印整个匹配项还是组?我想返回每个合同的foo
,是的,您从该文本的预期输出是什么?您是打印整个匹配项还是组?我想返回每个合同的foo
,是的,我忘了添加一行,我想省略“=”之类的内容一开始expression@JamesHallen在这种情况下,您可能可以尝试类似\(([^=)][^]*)
,但我不确定“类似”=”的东西是什么意思specifically@JamesHallen我的推荐书中的建议应该对这一点有用。为了使它更具一般性,我可以做什么
?因此,它应该删除所有不是以字母、美元符号或字母开头的内容number@JamesHallen那应该可以,但是你不需要管道,你需要的是\d
而不是d
对不起,我忘了添加一行,我想省略像“=”这样的内容一开始expression@JamesHallen在这种情况下,您可能可以尝试类似\(([^=)][^]*)
,但我不确定“类似”=”的东西是什么意思specifically@JamesHallen我的推荐书中的建议应该对这一点有用。为了使它更具一般性,我可以做什么
?因此,它应该删除所有不是以字母、美元符号或字母开头的内容number@JamesHallen那应该没问题,但你不需要管道,你需要的是\d
,而不仅仅是d