文章目录
0.摘要
初步了解 P y t h o n 3 Python3 Python3中的正则表达式。
1.案例研究: 街道地址
我的目的是要标准化街道的格式,比如把街道最后的英文单词 R O A D ROAD ROAD替换为 R D . RD. RD.。在第一个例子中使用 r e p l a c e ( ) replace() replace()就可以了。
但是有些街道名中 R O A D ROAD ROAD出现了多次,比如第二个例子,这时候替换得到的结果是错误的。
为了解决上面这个问题,你可能会这么考虑:只在地址的最后四个字符中替换 R O A D ROAD ROAD( s [ − 4 : ] s[-4:] s[−4:])。然后把剩下的字符串独立开来处理( s [ : − 4 ] s[:-4] s[:−4])。这个方法很笨拙。比如,这个方法会依赖于你要替换的字符串长度(如果你用 . S T .ST .ST来替换 S T R E E T STREET STREET,就需要在 s [ − 6 : ] s[-6:] s[−6:]中查找 S T R E E T STREET STREET,然后再取 s [ : − 6 ] s[:-6] s[:−6]。你难道还想半年后回来继续修改BUG?反正我是不想。
是时候转换到正则表达式了。在 p y t h o n python python中,所有的正则表达式相关功能都包含在 r e re re模块中。注意第一个参数最后的美元符号,这是一个匹配 R O A D ROAD ROAD仅仅出现在字符串结尾的正则表达式。表示字符串结尾(还有一个相应的表示字符串开头的字符 ^ )。正则表达式模块的 r e . s u b ( ) re.sub() re.sub()函数可以做字符串替换,它在字符串 s s s中用正则表达式 R O A D $ ROAD$ ROAD$来搜索并替换成 R D . RD. RD.。它只会匹配字符串结尾的 R O A D ROAD ROAD,而不会匹配到 B R O A D BROAD BROA