python - 需要对正则表达式代码的一部分进行具体解释
问题描述
我正在用 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" 在这个正则表达式中的用途吗?
谢谢你的帮助!:)
解决方案
正则表达式的“repl”部分是这个组件:
r"\1\2"
在正则表达式的“查找”部分,正在进行组捕获(通常由内容周围的“()”字符表示,尽管这可以被特定参数覆盖)。
在 python 正则表达式中,用于指示对位置捕获组的引用(有时称为“反向引用”)的语法是“\n”(其中“n”是指“查找”部分中组的位置的数字的正则表达式)。
因此,此正则表达式返回一个字符串,其中整体内容被专门替换为与编号组匹配的输入字符串的一部分。
注意:我不相信“repl”的“\1”部分实际上是必需的。我认为:
r"\2"
...也可以。
推荐阅读
- amazon-web-services - 将物理名称从一个堆栈导出和导入到另一个堆栈
- node.js - 在 express-handlebars 中使用 javascript 代码
- django - 要选择的 Django 过滤器字段
- amazon-web-services - AWS Lambda EMF 指标未完全打印
- reactjs - 尝试将商品添加到我的购物车时出现未处理的拒绝错误
- java - jdbc 错误 SybResultSet.isClosed()Z 中的 SQLServerBulkCopy 是抽象的
- c++ - C++ 模板实例化,错误:非类类型“int”的成员
- extjs - ExtJs ComboBox 刷新选定(原始)值
- python - Python Pandas - excel中的sumif - 标准和范围相同的df volumn
- r - R闪亮模块修改DF中的列类不在模块中工作,但在“正常”R中工作