gpt4 book ai didi

python - 在第二个或第三个大写字母后面插入空格 python

转载 作者:太空宇宙 更新时间:2023-11-03 21:43:19 25 4
gpt4 key购买 nike

我有一个包含地址的 pandas 数据框。有些格式正确,如 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 处进行 sub 。理想情况下,我想使用索引在 [-2:] 处分割匹配但我不知道该怎么做。

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

谢谢

最佳答案

您可以使用

df['Test'] = df['Test'].str.replace(r'\b([A-Z]{1,2})([A-Z][a-z])', r'\1 \2')

参见this regex demo

详细信息

  • \b - 单词边界
  • ([A-Z]{1,2}) - 捕获组 1(稍后在替换模式中用 \1 引用):一个或两个大写字母
  • ([A-Z][a-z]) - 捕获组 2(稍后在替换模式中用 \2 引用):一个大写字母 + 一个小写字母。

如果您想要专门匹配城市象限,您可以使用更具体的正则表达式:

df['Test'] = df['Test'].str.replace(r'\b([NS][EW]|[NESW])([A-Z][a-z])', r'\1 \2')

参见this regex demo 。在这里,[NS][EW]|[NESW]匹配NS后面跟着 EW ,或单个 N , E , SW .

Pandas 演示:

import pandas as pd
df = pd.DataFrame({'Test':['481 Rogers Rd York ON',
'101 9 Ave SWCalgary AB',
'101 9 Ave SCalgary AB']})
>>> df['Test'].str.replace(r'\b([A-Z]{1,2})([A-Z][a-z])', r'\1 \2')
0 481 Rogers Rd York ON
1 101 9 Ave SW Calgary AB
2 101 9 Ave S Calgary AB
Name: Test, dtype: object

关于python - 在第二个或第三个大写字母后面插入空格 python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52683571/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com