我正在上一门 Python 入门课程,但在尝试进行正则表达式替换时遇到了问题。
问题说明:编写一个替换命令,将文件 1、文件 2 等名称更改为文件 01、文件 02 等,但不会向文件 10 或文件 20 等名称添加零。
这是我的解决方案:
re.sub(r'(\D+)(\d)$',r'\10\2','file1')
如您所见, 0 与我的 \1 参考相混淆。谁能帮我一个简单的解决方案?谢谢!
我正在上一门 Python 入门课程,但在尝试进行正则表达式替换时遇到了问题。
问题说明:编写一个替换命令,将文件 1、文件 2 等名称更改为文件 01、文件 02 等,但不会向文件 10 或文件 20 等名称添加零。
这是我的解决方案:
re.sub(r'(\D+)(\d)$',r'\10\2','file1')
如您所见, 0 与我的 \1 参考相混淆。谁能帮我一个简单的解决方案?谢谢!
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/
不知道python,但在你的正则表达式中你只想要一位而不是两位
对于比赛,你可以这样做
.+[^\d]\d$
test1 将匹配 test1 将不匹配
祝你好运
@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 匹配的整个子字符串。