Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中用于匹配()内内容的正则表达式_Python_Regex - Fatal编程技术网

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

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

我想匹配括号内的内容(其中一个带有“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 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