我正在开始Python课程,并且在尝试进行正则表达式替换时遇到了问题。
问题陈述:编写一个替换命令,将file1,file2等名称更改为file01,file02等,但不会向file10或file20等名称添加零。
这是我的解决方案:
re.sub(r'(\D+)(\d)$',r'\10\2','file1')
如您所见,0正在弄乱我的\ 1引用。任何人都可以帮我一个简单的解决方案?谢谢!
答案 0 :(得分:2)
import re
print re.sub(r'(\D+)(\d)$',r'\g<1>0\2','file1')
不要问..只需要做\ g&lt;#&gt;事情,它在python中工作正常。其他语言也有同样的问题:
http://resbook.wordpress.com/2011/01/04/regex-with-back-references-followed-by-number/
答案 1 :(得分:0)
不知道python,但在你的正则表达式中,你只想要一个数字,而不是两个
对于匹配你可以像这样做
.+[^\d]\d$
test1将匹配 test1不匹配
祝你好运答案 2 :(得分:0)
@sdanzig有正确的答案,但如果你坚持要求,它实际上是一个记录在案的功能:
http://docs.python.org/2/library/re.html
阅读re.sub()
的最后一段。
在字符串型repl参数中,除了字符转义 和上面描述的反向引用,\ g将使用子字符串 由名为name的组匹配,由(?P ...)定义 句法。 \ g使用相应的组号; \克LT 2 - ;是 因此相当于\ 2,但在替换中并不含糊 如\ g 2 0。 \ 20将被解释为对第20组的引用,而不是第20组 引用第2组,后跟文字字符“0”。该 反向引用\ g&lt; 0&gt;在匹配的整个子字符串中替换 RE