2017-07-24 44 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')。 –