2016-09-16 2 views
0

Ich habe einen regulären Ausdruck (?<=\d\b)(.*)(?=ave), die einfach die Zeichenfolge zwischen Ziffern und ave findet. Beispiel: 12234 dragon ave wird als dragon ausgegeben.Regex Parsing zwischen 1 oder mehr Zeichenfolgen

Nehmen wir jedoch an, dass einige Adressen optional E(east),W(west),S(south),N(north) or NE, SE usw. haben. Beispiel 122234 E dragon ave. Wie soll meine Regex aussehen, damit sie nur dragon Teile wieder parsen kann?

+0

wird dieser Drachenteil wiederholt? Wenn nicht, warum kannst du dann nur '(Drachen)' in deiner Regex benutzen. –

+0

Datenbank enthalten über 1 Million Daten, so ist es nur Drachen .. –

Antwort

0
(?<=\d\b)\s*\S*\s(\S+)\s(?=ave) 

Sie können etwas dieser Art verwenden und die Gruppe ergreifen.

Siehe Demo.

https://regex101.com/r/jX1rN4/2

+0

was, wenn nur "N, S, W, E, Nord, West, NE" auszuschließen ... ... zum Beispiel: "100 alten Ahorn Ave", Ich möchte nur "alten Ahorn" Teil extrahieren. Auch, 100 N alter Ahorn ave "wie nur" alter Ahorn " –

+0

@ThomasDalls dann müssen Sie etwas wie' (? <= \ D \ b) \ s * (?: N | S | W | E | Norden | West (NE) * \ s (. *?) \ S (? = Ave) ' – vks

+0

@ThomasDalls siehe Demo https://regex101.com/r/jX1rN4/5 – vks

0

Können Sie awk für diesen Einsatz?

awk 'NF==4{ print $3 } NF==3{ print $2 }' </tmp/addresses.txt 

Hier ist, was addresses.txt wie folgt aussieht:

12345 E Dragon ave 
13 diagonal ave 
1235 West Cherrytree ave 

Hinweis Diese Einschränkungen. Zum Beispiel, wie würden Sie Adressen wie handhaben:

1235 West Cherry Tree ave 

Das frage ich mich macht, tun Sie wollen einfach nur Hausnummern, Himmelsrichtungen und Straßen/Wege/etc vermeiden? Es ist wichtig zu verstehen, was Ihre Eingaben sein können, da dies wirklich bestimmen kann, wie Ihr Skript aussehen könnte.

+0

Ich kann nicht awk..aber es scheint eine bessere Option zu sein –

0

Eine alternative Idee ist, jedes Wort zwischen den Zahlen und "all" zu erfassen, wie diese regex:

(?<=\d\b)(\s[a-zA-z]+\s)(.*)(?=[ave]*) 

https://regex101.com/r/rU0lK1/3

EDIT

ich Ihre Kommentare zu vk der Säge antworte über das optionale Capturen der "ave" -String, also habe ich regex101 demo und "ave" string capture aktualisiert.

Verwandte Themen