Come posso analizzare un indirizzo nei suoi singoli componenti?

c# html-agility-pack parsing regex

Domanda

Sono stato incaricato di creare un parser che analizzasse una particolare pagina Web, in modo che i nostri dipendenti possano importare in blocco i loro dati utente nel loro sito web con la nostra azienda.

Ho utilizzato il HtmlAgilityPack per analizzare la pagina, ho correlata alla table row e table data di essere spinto in immobili a mia Map di classe.

Comunque una colonna mi sta causando un sacco di dolore. La colonna Indirizzo , è la spina nel mio fianco per un assortimento di motivi.

Dati di esempio:

6313 SW 203rd Ave <br> Portland, OR 97224
16600 Lomita Way <br> El Dorado Hills, CA 95762
PO Box #42 <br> Hampton Bays, NY 11946

Ognuno di questi indirizzi è incapsulato in questo modo (ovviamente gli indirizzi possono variare in base al cliente per il quale stiamo importando gli utenti):

6313 SW 203rd Ave <br> Portland, OR 97224
16600 Lomita Way <br> El Dorado Hills, CA 95762
PO Box #42 <br> Hampton Bays, NY 11946

Sto cercando di implementare un'espressione regolare per dividerlo nell'area appropriata, in modo che possa essere assegnato alle proprietà correlate:

6313 SW 203rd Ave <br> Portland, OR 97224
16600 Lomita Way <br> El Dorado Hills, CA 95762
PO Box #42 <br> Hampton Bays, NY 11946

Tuttavia gli indirizzi non forniscono molto di ancoraggio di:

Problema Uno: Se io ancora al largo della <br> allora sto solo che separa le righe. Non si divide completamente in segmenti appropriati.

Numero due: lo stesso problema con la singola virgola.

Problema 3: se ancoraggio a valori numerici, il codice postale potrebbe non essere valido per il Canada e potrebbe essere diviso in modo errato in base al nome della via.

Qual è il modo migliore per separare gli articoli per un indirizzo? Con Regex?

Risposta accettata

Ok, quindi il campo Address stato abbastanza doloroso da analizzare. Tuttavia sono riuscito a analizzare i dati in base alle mie particolari esigenze.

  • L' Address ha sempre un <br> tra la Street & City.

Quindi ho fatto quanto segue:

var splitBasedOnHTML = Regex.Split(column[2], @"\br<br>");

La column[] contiene il mio indirizzo index two . Quindi, dopo quella chiamata, posizionerà automaticamente la mia unità e Street in Index Zero . La città, lo stato e lo zip si troveranno Index One .

Così ho fatto un'altra divisione, per rompere la città, lo stato e lo zip in questo modo:

var splitBasedOnHTML = Regex.Split(column[2], @"\br<br>");

Dopo di che ora finisco con il seguente:

var splitBasedOnHTML = Regex.Split(column[2], @"\br<br>");

Quindi ho semplicemente mappato le mie proprietà a quelle dell'indice di array individuale.

Questa soluzione presuppone che l'Unità si trovi in ​​una parte della strada , che diventa un sacrificio accettabile quando i dati vengono importati in un altro sito Web e possono essere modificati da particolari persone in seguito.

È così che ho risolto i problemi di analisi, questa soluzione potrebbe non essere valida per gli altri in questa barca, ma si spera che questa sia una buona alternativa o punti in una buona direzione. Come si presenta il metodo:

var splitBasedOnHTML = Regex.Split(column[2], @"\br<br>");

Risposta popolare

Gli indirizzi di analisi sono difficili; davvero difficile. Non esiste un formato veramente uniforme per gli indirizzi, in particolare oltre i confini nazionali. È altamente improbabile che tu sia in grado di farlo utilizzando una singola RegEx.

Vedi questo altro post per alcuni esempi e una spiegazione più approfondita. Come analizzare testo / indirizzo postale a mano libera da testo e componenti




Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché