我正在使用正则表达式从13位ISBN中剥离非数字字符,我遇到了一些我想要理解的奇怪行为.我用Python 2.7.5和3.3.2测试了这个:
import re re.sub("\D", '', '978-1-936978-09-0')
这正确地给出了9781936978090.但我注意到如果我这样做......
re.sub("\D", '', '978-1-936978-09-0', re.IGNORECASE)
...与re.IGNORECASE,它留在最后两个破折号,给出:9781936978-09-0.
并不重要,但我仔细检查了所有四个破折号是完全相同的字符(只是一个普通的破折号).我尝试了一些变体(比如[^\d]而不是\ D或[^ 0-9])并得到了同样奇怪的结果.
这对我来说并不紧急,因为忽略案例对此无关紧要,但我想知道发生了什么.有任何想法吗?
第四个参数re.sub
不是flags
,但替换计数.您应该flags
使用flags
关键字参数指定.
re.sub(pattern, repl, string, count=0, flags=0) # ^^^^^^^
>>> re.sub("\D", '', '978-1-936978-09-0', flags=re.IGNORECASE) '9781936978090'