Excel:解析地址

时间:2016-12-14 19:25:11

标签: excel python-2.7 parsing beautifulsoup

我在网上搜索了泰国餐馆的一些数据。我目前在地址字段方面存在问题,因为在网站上地址移动到下一行时,scrape决定将其合并而不留下任何空间。例如:

22/F, Dusit Thani Bangkok946 Rama 4 RoadBangkokThailand 
1/F, Oakwood Residence113 Thonglor Soi 13BangkokThailand 
G/F, Ocean Tower IISukhumvit Soi 21WattanaBangkokThailand 

在第一个条目中,我想在k和9以及d和B之间留一个空格,依此类推其他条目。

我目前正在使用BeautifulSoup来抓取here中的数据。如果有人可以帮助我解决这个问题或者更好的方法来解析HTML,我会全力以赴。我宁愿不手动改变280多个地址条目。

1 个答案:

答案 0 :(得分:2)

您的示例显示了需要插入空间的几种模式:

  • 小写字母后跟大写字母
  • 小写字母后跟数字
  • 数字后跟一个大写字母
    • (但最后可能会出现包含数字和字母的地址的问题)

这可以使用正则表达式完成,在VBA中开发用户定义函数。

Option Explicit
Function SplitAddress(S As String) As String
    Dim RE As Object
    Const sPatNumberCap As String = "\d(?=[A-Z])"
    Const sPatNonCapNumberOrCap As String = "[a-z](?=[A-Z0-9])"
    Const sRepl As String = "$& "
    Dim sTemp As String

Set RE = CreateObject("vbscript.regexp")    
With RE
    .Global = True
    .ignorecase = False

    .Pattern = sPatNumberCap
    sTemp = .Replace(S, sRepl)

    .Pattern = sPatNonCapNumberOrCap
    sTemp = .Replace(sTemp, sRepl)
End With

SplitAddress = sTemp

End Function

如果某个街道的地址2A存在问题,您可以更改.Pattern,具体取决于这些类型的字符串的真实外观。仅当大写字母后面是非空白字符时,才可以确保仅插入空格。

例如:

Const sPatNumberCap As String = "\d(?=[A-Z]\S)"

但没有例子,很难推测。