gpt4 book ai didi

python - 如何在 python 中编写一个在字符串中第一个句点处停止的正则表达式,该字符串具有不可预测的字符类型?

转载 作者:行者123 更新时间:2023-12-01 01:44:37 25 4
gpt4 key购买 nike

我有几百万个方程,例如: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)找到“一个方程”加上任意数量的空格,但不保留它。
(.*=.*)断言必须有一个等号。我发现这几乎肯定会普遍排除非方程。如果没有,我可以检测并处理一些杂项情况。
.\?在我看来,这应该在 = 符号之后找到第一个句点(即,从 . 使用 的典型解释中逃脱),然后停止。然而,事实并非如此。

我的正则表达式返回:

a(%)^ + b# = (+)C!. An annotation about the (!!*) equation.

我认为.\?正则表达式的贪婪本质就是问题所在。我已经尝试了许多其他组合 .\?[]有和没有() 。这些都返回与上面有关注释的第二个语句或 NoneType 一样的结果。 (即不匹配)。我现在感觉完全不知道如何在第一次月经后停止。

预先感谢您的帮助。我已经在这个网站上花了两天时间并使用 Python 文档来尝试解决这个问题。我只是无法找到/理解我需要什么。

最佳答案

正则表达式的贪婪本质确实是问题所在。试试这个:

rx = re.search(r'(?<=an equation:\s)(.*=[^\.]*)\.',e)

两个区别是我删除了“?”在您的最后一段时期之后,因为根据“永远是真的事情”#4,它不是可选的。然后我告诉等号后面的贪婪位,它可以匹配除句点之外的任何内容。这意味着一旦到达第一个非可选周期,它将停止匹配。

作为快速提示,我使用了 Regex101.com快速调试您的正则表达式。我强烈推荐它来构建正则表达式!

关于python - 如何在 python 中编写一个在字符串中第一个句点处停止的正则表达式,该字符串具有不可预测的字符类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51522564/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com