python - 在第二个或第三个大写字母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')
将返回字符串的最后一部分,我可以使用前瞻正则表达式来查找开始然后加入它们,但这似乎非常低效。
谢谢
解决方案
您可以使用
([A-Z]{1,2})(?=[A-Z][a-z])
捕获第一个(或第一个和第二个)大写字母,然后对大写字母后跟小写字母使用前瞻。然后,替换为第一组和一个空格:
re.sub(r'([A-Z]{1,2})(?=[A-Z][a-z])', r'\1 ', str)
推荐阅读
- azure-devops - Azure 管道“每个”表达式仅在特定任务中
- python - 通过跳过字符匹配字符串/序列
- html - Bootstrap 导航栏填充
- c++ - 在 lambda 中移动参数捕获
- visual-studio-code - ESP-IDF VScode Monitor KeyError: 'IDF_PATH'
- node.js - 有没有办法在 express-react-views 中使用反应库?
- amazon-web-services - 如何将 api 网关端点路由到 ec2 私有 IP
- java - ConfigurationProperties 加载取决于值
- javascript - 如何使用带有反应钩子的互斥锁?
- javascript - Javascript 中没有变量声明的函数如何可能?