Python正则表达式引用与替换号冲突

时间:2013-08-14 01:30:34

标签: python regex substitution

我正在开始Python课程,并且在尝试进行正则表达式替换时遇到了问题。

问题陈述:编写一个替换命令,将file1,file2等名称更改为file01,file02等,但不会向file10或file20等名称添加零。

这是我的解决方案:

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

如您所见,0正在弄乱我的\ 1引用。任何人都可以帮我一个简单的解决方案?谢谢!

3 个答案:

答案 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