第一章正则表达式 1.3
1.3.12
使用sub()和subn()搜索与替换
在最后一段,文中提到:
“前面讲到,使用匹配对象的group()方法除了能够取出匹配分组编号外,还可以使用\N,其中 N 是在替换字符串中使用的分组编号。下面的代码仅仅只是将美式的日期表示法MM/DD/YY{,YY}格式转换为其他国家常用的格式DD/MM/YY{,YY}。
>>> re.sub(r'(\d{1,2})/(\d{1,2})/(\d{2}|\d{4})',
... r'\2/\1/\3', '2/20/91') # Yes, Python is...
'20/2/91'
>>> re.sub(r'(\d{1,2})/(\d{1,2})/(\d{2}|\d{4})',
... r'\2/\1/\3', '2/20/1991') # ...20+ years old!
'20/2/1991"
摘录来自
Python核心编程 第3版
[美]卫斯理 春(Wesley Chun)
此材料受版权保护。”
我注意到,当按照书中格式尝试对日期的日,月,年进行识别并交换位置时,issue如下
>>> re.sub(r'(\d{1,2})/(\d{1,2})/(\d{2}|\d{4})', r'\2/\1/\3', '2/20/1991')
'20/2/1991'
>>> re.sub(r'(\d{1,2})/(\d{1,2})/(\d{2}|\d{4})', r'\3/\1/\2', '4/13/2022')
'20/4/1322'
明显 \3
在对年份的识别有错,即如果写 (\d{2}|\d{4})
,会从左到右匹配,这样一来 2022
只有 20
会被匹配到,导致出现 '20/4/1322'
的情况
在将 (\d{2}|\d{4})
的顺序调过来,变成 (\d{4}|\d{2})
之后,issue解决了,无论是两位数年份还是四位数的年份
>>> re.sub(r'(\d{1,2})/(\d{1,2})/(\d{4}|\d{2})', r'\3/\1/\2', '4/13/2022')
'2022/4/13'
>>> re.sub(r'(\d{1,2})/(\d{1,2})/(\d{4}|\d{2})', r'\3/\1/\2', '4/13/22')
'22/4/13'
PS:吐槽一句博客园的markdown似乎 <br>
不可以贴着下一行,否则下一行的md语法就无法正常显示
Original: https://www.cnblogs.com/wutongshu-ltz/p/16140995.html
Author: 梧桐树·三更雨
Title: Python核心编程 第三版 的一些小issue
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/499974/
转载文章受原作者版权保护。转载请注明原作者出处!