首页 > 解决方案 > 在第二个或第三个大写字母python之后插入空格

问题描述

我有一个包含地址的熊猫数据框。有些格式正确,例如481 Rogers Rd York ON. 其他的城市象限和城市名称之间缺少空格,例如:101 9 Ave SWCalgary AB甚至可能:101 9 Ave SCalgary AB,其中SW指的是西南S和南。

我正在尝试找到一个正则表达式,如果它们后跟小写字母,则在第二个和第三个大写字母之间添加一个空格,或者如果只有两个大写字母后跟小写,则在第一个和第二个大写字母之间添加一个空格。

到目前为止,我发现这([A-Z]{2,3}[a-z])将正确匹配情况,但我无法弄清楚如何回顾它并在位置 2 或 3 处分。理想情况下,我想使用索引将匹配拆分为[-2:]但我不知道该怎么做。

我发现这re.findall('(?<=[A-Z][A-Z])[A-Z][a-z].+', '101 9 Ave SWCalgary AB') 将返回字符串的最后一部分,我可以使用前瞻正则表达式来查找开始然后加入它们,但这似乎非常低效。

谢谢

标签: pythonregexpandas

解决方案


您可以使用

([A-Z]{1,2})(?=[A-Z][a-z])

捕获第一个(或第一个和第二个)大写字母,然后对大写字母后跟小写字母使用前瞻。然后,替换为第一组和一个空格:

re.sub(r'([A-Z]{1,2})(?=[A-Z][a-z])', r'\1 ', str)

https://regex101.com/r/TcB4Ph/1


推荐阅读