Python字符串拆分

Python字符串拆分,python,Python,在python中,最好的分割方法是什么。(地址、城市、州、邮编) 伊利诺伊州芝加哥贝尔蒙特大道西7616号,邮编60634-3225 在某些情况下,邮政编码如下 <div class="adtxt">7616 W Belmont Ave<br />Chicago, IL 60634</div> 伊利诺伊州芝加哥贝尔蒙特大道西7616号,邮编60634 根据您希望在无法从单个示例推断的各个方面做到的严格程度或宽松程度,下面的方法应该可以奏效 import

在python中,最好的分割方法是什么。(地址、城市、州、邮编)

伊利诺伊州芝加哥贝尔蒙特大道西7616号,邮编60634-3225 在某些情况下,邮政编码如下

 <div class="adtxt">7616 W Belmont Ave<br />Chicago, IL 60634</div>
伊利诺伊州芝加哥贝尔蒙特大道西7616号,邮编60634
根据您希望在无法从单个示例推断的各个方面做到的严格程度或宽松程度,下面的方法应该可以奏效

import re

s = re.compile(r'^<div.*?>([^<]+)<br.*?>([^,]+), (\w\w) (\d{5}-\d{4})</div>$')
mo = s.match(thestring)
if mo is None:
  raise ValueError('No match for %r' % thestring)
address, city, state, zip = mo.groups()
重新导入

s=re.compile(r'^([^只是一个提示:例如,解析HTML的方法比正则表达式好得多


编辑:哦,好吧,@teepark首先链接了它。

将beautifulsou和正则表达式结合起来,应该会得到如下结果:

import BeautifulSoup
import re
thestring = r'<div class="adtxt">7616 W Belmont Ave<br />Chicago, IL 60634-3225</div>'
re0 = re.compile(r'(?P<address>[^<]+)')
re1 = re.compile(r'(?P<city>[^,]+), (?P<state>\w\w) (?P<zip>\d{5}-\d{4})')
soup = BeautifulSoup.BeautifulSoup(thestring)
(address,) = re0.search(soup.div.contents[0]).groups()
city, state, zip = re1.search(soup.div.contents[2]).groups()
导入美化组
进口稀土
该串=r'7616西贝尔蒙特大街
伊利诺伊州芝加哥60634-3225'
re0=重新编译(r'(?P[^对于这个具体的例子,给出一个方法很容易,但是如果你解释你需要处理什么类型的地址,以及你在做什么假设,你会得到一个更好的答案。例如:可以有多个地址行吗?你必须处理国际地址吗?州/地区是否可能在不同的行上?Will是分隔行的唯一方法吗?等。等。强制性:该方法工作正常,但如果zip仅为5位数字,它会在regexp末尾抛出errorreplace
(\d{5}-\d{4})
,并带有
(\d{5}-\d{4}\d{5})
@bobsr,我确实解释过,这取决于你想对无法从一个例子中推断出的条件有多严格或宽松——如果唯一的变化(根据你的编辑)在zipcode中,@cji的解决方案解决了这个问题;如果有更多的变化,你需要更多的调整。顺便说一句,我同意标签本身的解析最好由HTML解析器完成,但是如果你这样做,你仍然需要进一步处理城市/州/邮政编码的分离。这很好,但是如果邮政编码只有5位(60634),它抛出错误
import BeautifulSoup
import re
thestring = r'<div class="adtxt">7616 W Belmont Ave<br />Chicago, IL 60634-3225</div>'
re0 = re.compile(r'(?P<address>[^<]+)')
re1 = re.compile(r'(?P<city>[^,]+), (?P<state>\w\w) (?P<zip>\d{5}-\d{4})')
soup = BeautifulSoup.BeautifulSoup(thestring)
(address,) = re0.search(soup.div.contents[0]).groups()
city, state, zip = re1.search(soup.div.contents[2]).groups()