我试图拆分字符串:
> s = Ladegårdsvej 8B7100 Vejle
带正则表达式:
[street,zip,city] = ["Ladegårdsvej 8B", "7100", "Vejle"]
s
变化很大,唯一确定的部分是zip中总有4位数字,之后是空格。因此,我的想法是从正确的#34;匹配。 4个数字和一个空格,表示该字符串应该在字符串中的那一点被拆分。
目前,我可以像这样获得street
和city
:
> print re.split(re.compile(r"[0-9]{4}\s"), s)
["Ladegårdsvej 8B", "Vejle"]
我如何根据需要分割s
;特别是,如何在street
和zip
中的数字之间的字符串中间执行此操作?
答案 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)