需要部分正则表达式代码的具体说明

时间:2018-09-19 01:56:25

标签: python regex tkinter

我正在用Python开发计算器程序,需要从数字中删除前导零,以便计算能够按预期进行。例如,如果用户在计算器中输入“ 02 + 03”,则结果应返回5。为了删除这些数字开头的前导零,我在这里问了一个问题,并得到了以下答案。

self.answer = eval(re.sub(r"((?<=^)|(?<=[^\.\d]))0+(\d+)", r"\1\2", self.equation.get()))

我完全理解字符串开头和后面的非数字,非句点字符的正向查找是如何工作的。我感到困惑的是,在此正则表达式代码中哪里可以找到匹配模式的替代项?

我在研究正则表达式时在网上找到了这个。

result = re.sub(pattern, repl, string, count=0, flags=0)

上面的正则表达式代码中的“ repl”在哪里?如果可能的话,有人可以帮忙解释一下该正则表达式中的r“ \ 1 \ 2”吗?

感谢您的帮助! :)

3 个答案:

答案 0 :(得分:2)

正则表达式的“ repl”部分是以下组件:

r"\1\2"

在正则表达式的“查找”部分中,正在进行组捕获(通常由内容周围的“()”字符表示,尽管可以用特定的参数覆盖)。

在python regex中,用于指示对位置捕获组的引用(有时称为“反向引用”)的语法为“ \ n”(其中“ n”是指该组在“查找”作为正则表达式的一部分。

因此,此正则表达式返回一个字符串,在该字符串中,整体内容专门替换为输入字符串中与编号组匹配的部分。

注意:我不认为“ repl”的“ \ 1”部分实际上是必需的。我认为:

r"\2"

...也可以。

进一步阅读:https://www.regular-expressions.info/brackets.html

答案 1 :(得分:1)

查看示例:

>>> import re
>>> s='awd232frr2cr23'
>>> re.sub('\d',' ',s)
'awd   frr cr  '
>>> 

说明:

  • 实际上,'\d'是整数,因此将其删除并替换为repl(在这种情况下为' ')。

答案 2 :(得分:1)

首先,repl包含您将要替换的内容。

要了解\ 1 \ 2,您需要知道什么是捕获分组。
Check this video out for basics of Group capturing
在这里,由于您的正则表达式会将每个匹配项拆分为1,2 ...的组,依此类推。之所以这样,是因为您已在正则表达式中放置了括号()。 $ 1,$ 2或\ 1,\ 2可用来引用它们。

在这种情况下:
正则表达式用自己替换前导0(由组2捕获)之后的所有数字。
注意:不需要\ 1。没有它就可以正常工作。