1

我正在上一门 Python 入门课程,但在尝试进行正则表达式替换时遇到了问题。

问题说明:编写一个替换命令,将文件 1、文件 2 等名称更改为文件 01、文件 02 等,但不会向文件 10 或文件 20 等名称添加零。

这是我的解决方案:

re.sub(r'(\D+)(\d)$',r'\10\2','file1')

如您所见, 0 与我的 \1 参考相混淆。谁能帮我一个简单的解决方案?谢谢!

4

3 回答 3

2
import re
print re.sub(r'(\D+)(\d)$',r'\g<1>0\2','file1')

不要问..只需做 \g<#> 的事情,它会在 python 中正常工作。其他语言也有同样的问题:

http://resbook.wordpress.com/2011/01/04/regex-with-back-references-followed-by-number/

于 2013-08-14T01:48:07.510 回答
0

不知道python,但在你的正则表达式中你只想要一位而不是两位

对于比赛,你可以这样做

.+[^\d]\d$

test1 将匹配 test1 将不匹配

祝你好运

于 2013-08-14T01:41:21.590 回答
0

@sdanzig 有正确的答案,但如果你坚持要问,它实际上是一个记录在案的功能:

http://docs.python.org/2/library/re.html

阅读最后一段re.sub()

在字符串类型的 repl 参数中,除了上述字符转义和反向引用之外,\g 将使用由名为 name 的组匹配的子字符串,如 (?P...) 语法所定义。\g 使用对应的组号;因此,\g<2> 等价于 \2,但在诸如 \g<2>0 之类的替换中并没有歧义。\20 将被解释为对第 20 组的引用,而不是对第 2 组的引用,后跟文字字符“0”。反向引用 \g<0> 替换 RE 匹配的整个子字符串。

于 2014-01-22T03:11:05.103 回答