[英]How do I insert space before capital letter if and only if previous letter is not capital?
[英]Insert space after the second or third capital letter python
我有一個包含地址的熊貓數據框。 有些格式正確,例如481 Rogers Rd York ON
。 其他人在城市象限和城市名稱之間缺少空格,例如: 101 9 Ave SWCalgary AB
甚至可能: 101 9 Ave SCalgary AB
,其中SW
表示西南, S
表示南。
我試圖找到一個正則表達式,如果第二個和第三個大寫字母后跟小寫字母,或者如果只有2個大寫字母后跟小寫字母,則在第二個和第三個大寫字母之間添加一個空格,請在第一個和第二個之間添加一個空格。
到目前為止,我發現([AZ]{2,3}[az])
可以正確匹配這種情況,但是我無法弄清楚如何回過頭來查看它在位置2或3處的位置。我想使用索引在[-2:]
處分割比賽,但我不知道該怎么做。
我發現re.findall('(?<=[AZ][AZ])[AZ][az].+', '101 9 Ave SWCalgary AB')
將返回字符串的最后一部分,我可以使用期待正則表達式找到起點,然后加入他們,但這似乎效率很低。
謝謝
您可以使用
([A-Z]{1,2})(?=[A-Z][a-z])
捕獲第一個(或第一個和第二個)大寫字母,然后使用大寫字母lookahead后面跟一個小寫字母。 然后,用第一組和一個空格替換:
re.sub(r'([A-Z]{1,2})(?=[A-Z][a-z])', r'\1 ', str)
您可以使用
df['Test'] = df['Test'].str.replace(r'\b([A-Z]{1,2})([A-Z][a-z])', r'\1 \2')
觀看此正則表達式演示
細節
\\b
單詞邊界 ([AZ]{1,2})
-捕獲組1(后來在替換模式中以\\1
):一個或兩個大寫字母 ([AZ][az])
-捕獲組2(在替換模式中后來用\\2
):大寫字母+小寫字母。 如果要特別匹配城市象限 ,則可以使用更具體的正則表達式:
df['Test'] = df['Test'].str.replace(r'\b([NS][EW]|[NESW])([A-Z][a-z])', r'\1 \2')
請參閱此正則表達式演示 。 在這里, [NS][EW]|[NESW]
匹配后跟E
或W
N
或S
或單個N
, E
, S
或W
熊貓演示:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.