我有几百万个这样的方程式: 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文档来尝试解决此问题。我只是无法找到/理解我所需要的东西。
相关分类