我有几百万个这样的方程式: an equation: a(%)^ + b# = (+)C!.我要退货的是: a(%)^ + b# = (+)C!对于该方程式来说,永远都是正确的:1.它以“一个方程式:”开头。2.在两个空格之间将包含等号(=)。3.它将在两个空格之间包含任意数量的加号(+)。4.它将以句点(。)结尾。可能是正确的情况:1.该方程式可以包含附加的+和=,尽管没有用空格来描述。2.等式可以包含句点之后的其他信息,并且该信息可以包含句点。例如:an equation: a(%)^ + b# = (+)C!. An annotation about the (!!*) equation.3.我想方程式中可能有句点。我对此表示怀疑,并且我认为如果它们确实发生,它们将出现在等号之前(左侧)。4.该方程式可能不存在。该字符串永远不会为空,但它可能不包含一个方程式(即四个始终为真的条件)。这是我到目前为止的内容:e = "an equation: a(%)^ + b# = (+)C!. An annotation about the (!!*) equation."rx = re.search(r'(?<=an equation:\s)(.*=.*)\.?',e)print rx.group(0)让我解释一下正则表达式的每个部分:(r'(?<=an equation:\s)查找“等式”加上任意数量的空格,但不保留它。(.*=.*)断言必须有一个等号。我发现这几乎肯定会普遍排除非等式。如果没有,我可以检测并处理一些其他情况。.\?在我看来,这应该在=号之后找到第一个句点(即,摆脱了对。using的典型解释),然后停止。但是,事实并非如此。我的正则表达式返回:a(%)^ + b# = (+)C!. An annotation about the (!!*) equation.我认为.\?正则表达式的贪婪本质就是问题所在。我尝试了许多其他组合,分别使用.\和?以及[]带有和不带有()。所有这些都将如上所述返回带有注释的第二条语句,或者返回NoneType(即不匹配)。我现在感到完全不知道如何在第一阶段后停止。预先感谢您的帮助。我现在已经在此站点上花了两天时间,并使用Python文档来尝试解决此问题。我只是无法找到/理解我所需要的东西。
添加回答
举报
0/150
提交
取消