2016-12-14 8 views
0

タイのレストランにいくつかのデータを網かけしました。私は現在アドレス欄の問題を抱えています。その理由は、アドレスが次の行に移動したときに、擦り傷はそれを結合してスペースを残さないことにしたからです。例えば、Excel:アドレスの解析

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の間にスペースが必要ですが、他のエントリについても同様です。

私は現在、hereからデータをスクラップするためにBeautifulSoupを使用しています。誰かがこれを解析する方法やHTMLを掻き取るためのより良い方法で私を助けてくれるなら、私はすべての耳です。私は手動で280 +アドレスのエントリを変更しないことをお勧めします。

+0

数字から文字を区切る最初の部分はあまりにも厄介ではありません。次の問題は、「バンコク」から「道」を切り離すことです。それはいつも「バンコク」になるのだろうか?あるいは、私たちが使える都市のリストがありますか?私は各セルを取ることを考えています。文字の隣に数字がある場合は、その間にスペースを入れてください。それから、私たちは、どの都市に宇宙を加えるのか、そして国(タイだけであると仮定します)を知る必要があります。 – BruceWayne

+0

さて、私は難しい部分になると感じていた。残念なことに、Samutprakarnなどのように、そこに他の都市も置いています。番号から文字を分ける方法は? – dtrinh

答えて

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)" 

が、推測するのは難しい例、なし。

+1

うわーありがとう。それは魅力のように働いた。私は本当に私の正規表現をブラッシュアップする必要があります。 – dtrinh

関連する問題