我在网上搜索了泰国餐馆的一些数据。我目前在地址字段方面存在问题,因为在网站上地址移动到下一行时,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多个地址条目。
答案 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)"
但没有例子,很难推测。