删除地址标签并拆分

时间:2018-08-31 20:23:10

标签: python

给出以下字符串:

<address>
        113 N Michigan St<br/>Chicago, IL 60661
</address>

一个人如何分割它以便返回两个字符串:

113 N Michigan St
Chicago, IL 60661

而且,如果您有这样的字符串:

<address>
     113 n. Michigan St
</address>

它将返回:

['113 n. Michigan St','']

或与此字符串类似:

<address>
     Chicago, IL 60661
</address>

它将返回以下内容:

['','Chicago, IL 60661']

我曾尝试将某些东西放在一起,但在正则表达式中却非常糟糕:

re.search(r'<address>\.(.*?)</address>', *above string here*).group(1)

3 个答案:

答案 0 :(得分:2)

避免使用regex来解析html数据。使用专门为此设计的内容,例如BeautifulSoup

>>> text = """<address>
...         113 N Michigan St<br/>Chicago, IL 60661
... </address>"""
>>> 
>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup(text, "html.parser")
>>> 
>>> [addr.strip() for tag in soup.find_all('address') for addr in tag.strings]
['113 N Michigan St', 'Chicago, IL 60661']

答案 1 :(得分:1)

您不需要使用正则表达式:

s = '''<address>
        113 N Michigan St<br/>Chicago, IL 60661
</address>'''
strs = s[s.index('<address>')+len('<address>'):s.index('</address>')].strip().split('<br/>')
#['113 N Michigan St', 'Chicago, IL 60661']

答案 2 :(得分:1)

如果s是您的地址阻止字符串:

parts = [re.sub(r'\s*\n\s*', '', p) for p in re.split(r'<br/?>', re.sub(r'</?address>', '', s))]