我正在学习Python入门课程,在尝试正则表达式替换时遇到了问题。
问题是:编写一个替换命令,将file1、file2等名称更改为file01、file02等,但不会为file10或file20等名称添加零。
这是我的解决方案:
re.sub(r'(\D+)(\d)$',r'\10\2','file1')如您所见,0正在干扰我的\1引用。有人能帮我找个简单的解决办法吗?谢谢!
发布于 2013-08-14 01:48:07
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-14 01:41:21
不知道python,但在您的正则表达式中,您只想要一个数字而不是两个数字。
为了比赛,你可以这样做
.+[^\d]\d$test1将与test1不匹配
祝好运
发布于 2014-01-22 03:11:05
@sdanzig有正确的答案,但如果您坚持要问,这实际上是一个有记录的特性:
http://docs.python.org/2/library/re.html
阅读re.sub()的最后一段。
在字符串类型的repl参数中,除了上面描述的字符转义和反向引用之外,\g还将使用由名称组匹配的子字符串,如(?p.)语法。G使用相应的组号;因此,\g<2>相当于\2,但在替换(如\g<2>0 )中并不是模棱两可。20将被解释为对第20组的提及,而不是对第2组的提及,后面跟着文字'0‘。反向引用\g<0>在RE匹配的整个子字符串中替换。
https://stackoverflow.com/questions/18221834
复制相似问题