我正在用Python开发一个计算器程序,需要删除数字中的前导零,这样计算就可以像预期的那样工作。例如,如果用户在计算器中输入"02+03“,结果应该返回5。为了在数字前面删除这些前导零,我在这里问了一个问题,得到了以下答案。
self.answer = eval(re.sub(r"((?<=^)|(?<=[^\.\d]))0+(\d+)", r"\1\2", self.equation.get()))我完全理解字符串开头的正向后向和非数字的非周期字符是如何工作的。我感到困惑的是,在这个regex代码中,在哪里可以找到匹配模式的替代品?
我是在研究regex表达式时在网上发现的。
result = re.sub(pattern, repl, string, count=0, flags=0)上面regex代码中的"repl“在哪里?如果可能的话,是否有人能帮助解释在这个正则表达式中r"\1\2“是用来做什么的?
谢谢你的帮助!)
发布于 2018-09-19 02:24:18
首先,repl包括您将要替换的内容。
要理解\1\2,您需要知道什么是捕获分组。
在这里,因为你的正则表达式将它找到的每一组分割成1,2组.等等。这是因为您在regex中放置了括号()。$1,$2或\1,\2可以用来引用它们。
本例中的:
regex正在用它自己替换前导0(被组2捕获)之后的所有数字。
注意: \1不是必需的。没有它也很好。
发布于 2018-09-19 02:24:22
regex的"repl“部分是以下组件:
r"\1\2"在regex的"find“部分中,组捕获正在进行(通常由内容周围的"()”字符表示,尽管这可以被特定的参数覆盖)。
在python中,用于指示对位置捕获组(有时称为“反向引用”)的引用的语法是"\n“(其中"n”是指向该组在regex的"find“部分中的位置的数字)。
因此,这个regex返回一个字符串,在该字符串中,整个内容被特定的部分替换为输入字符串的一部分,这些部分由编号组匹配。
注意:我不相信"repl“中的”1“部分实际上是必需的。我认为:
r"\2"...would也同样有效。
发布于 2018-09-19 02:00:33
见示例:
>>> import re
>>> s='awd232frr2cr23'
>>> re.sub('\d',' ',s)
'awd frr cr '
>>> 解释:
'\d'是整数,因此移除它们并用repl (在本例中是' ')替换它们。https://stackoverflow.com/questions/52396923
复制相似问题