使用Python正则表达式在字符之间拆分字符串

时间:2017-07-24 12:18:33

标签: python regex string split

我试图拆分字符串:

> s = Ladegårdsvej 8B7100 Vejle

带正则表达式:

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

s变化很大,唯一确定的部分是zip中总有4位数字,之后是空格。因此,我的想法是从正确的#34;匹配。 4个数字和一个空格,表示该字符串应该在字符串中的那一点被拆分。

目前,我可以像这样获得streetcity

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

我如何根据需要分割s;特别是,如何在streetzip中的数字之间的字符串中间执行此操作?

3 个答案:

答案 0 :(得分:8)

您可以使用re.split,但将四位数作为捕获组:

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

来自documentation(强调我的)

  

按照模式的出现拆分字符串。 如果在模式中使用捕获括号,则模式中所有组的文本也将作为结果列表的一部分返回。如果maxsplit非零,则最多发生maxsplit拆分,其余部分为string作为列表的最后一个元素返回。

答案 1 :(得分:1)

一旦你有街道,获得拉链是微不足道的:

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

答案 2 :(得分: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)