python regex - 使用re.IGNORECASE时,虚线匹配为数字

 幸运幸福一家人1314_332_887 发布于 2023-02-12 19:46

我正在使用正则表达式从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])并得到了同样奇怪的结果.

这对我来说并不紧急,因为忽略案例对此无关紧要,但我想知道发生了什么.有任何想法吗?

1 个回答
  • 第四个参数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'
    

    2023-02-12 19:47 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有