猿问

如何在python中编写一个正则表达式,该正则表达式在字符串的第一个句点处停止

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


慕盖茨4494581
浏览 203回答 1
1回答
随时随地看视频慕课网APP

相关分类

Python
我要回答