2017-07-24 60 views
3

我想要的字符串分割:分割字符串與Python正則表達式

> s = Ladegårdsvej 8B7100 Vejle 

用正則表達式爲:

[street,zip,city] = ["Ladegårdsvej 8B", "7100", "Vejle"] 

s差異很大,唯一的某一部分是有在zip中總是4位數字,之後是空白符號。因此,我的想法是在4位數字和空白處「從右邊進行匹配」,以指示字符串應該在字符串中的那一點被分割。

目前我能夠得到streetcity這樣的:

> print re.split(re.compile(r"[0-9]{4}\s"), s) 
["Ladegårdsvej 8B", "Vejle"] 

我怎麼會去分裂s根據需要;特別是如何在streetzip之間的字符串中間做到這一點?

+0

會的所有字符串具有相同的總體格式,該字符串,因爲那樣你可以只把它分解的空白原因,這似乎是三個 –

+1

@Professor_Joykill之間的分隔符:有街道和拉鍊之間沒有空格。 –

+1

@Professor_Joykill請注意,OP希望將'7100'而不是'8B7100'放入'zip'中。 –

回答

8

您可以使用re.split,但讓四位數字捕獲組:

>>> s = "Ladegårdsvej 8B7100 Vejle" 
>>> re.split(r"(\d{4}) ", s) 
['Ladegårdsvej 8B', '7100', 'Vejle'] 

documentation(重點煤礦)

由模式發生的分割字符串。 如果在模式中使用捕獲括號,則模式中所有組的文本也會作爲結果列表的一部分返回。如果maxsplit不爲零,則最多發生maxsplit分裂,並且字符串的其餘部分作爲列表的最後一個元素返回。

1

一旦街頭,越來越拉鍊很簡單:

zip = s[len(street):len(street)+4] 
0

這是您的問題的解決方案。

# -*- coding: utf-8 -*- 
import re 
st="Ladegårdsvej 8B7100 Vejle" 
reg=r'([0-9]{4})' 
rep=re.split(reg,st) 
print rep 

RasmusP_963先生提供的其他測試案例的解決方案。

# -*- coding: utf-8 -*- 
import re 
st="Birkevej 8371900 Roskilde" 
print re.split(r"([0-9]{4}) ",st) 
+0

這是行不通的,因爲可能有一個沒有字母的長房號的「街道」地址(例如'Birkevej 8371900 Roskilde'),所以我需要在之後包含空格以確保它匹配最後四個數字( 'zip')。 –