Reg-Ex Pattern für doppelte Orte gesucht!

  • Ich suche ein RegEx-Pattern was mir nur die Ortschaften ausgibt. Leider stehen im String die Orte doppelt hintereinander, was die Sache etwas verkompliziert.

    <td>60311 Frankfurt am Main Frankfurt am Main</td>
    <td>36251 Bad Hersfeld Bad Hersfeld</td>
    <td>20099 Hamburg Hamburg</td>

    Bei Hamburg könnte man noch mit einer Backreferenz (\1) arbeiten, doch bei den beiden anderen Beispielen fällt mir leider nix ein.

    cu, Lesato!

    • Offizieller Beitrag

    Nicht unbedingt als RegExp-Pattern, aber so funktioniert es wenigstens:

    AutoIt
    #include <Array.au3>
    $string = '<td>60311 Frankfurt am Main Frankfurt am Main</td>' & @CRLF & '<td>36251 Bad Hersfeld Bad Hersfeld</td>' & @CRLF & '<td>20099 Hamburg Hamburg</td>' & @CRLF
    $array = StringRegExp($string, '<td>\d{5}(.+)</td>', 3) ; HTML-Formatierung und PLZ abtrennen
    _ArrayDisplay($array, 'Vorher')
    For $i = 0 To UBound($array) - 1
    	$array[$i] = StringMid($array[$i], 2, StringLen($array[$i]) / 2 - 1) ; einzelne Strings durch 2 teilen
    Next
    _ArrayDisplay($array, 'Nachher')
  • Nur der Vollständigkeit halber (wenn ich das so richtig verstanden habe):

    AutoIt
    #include <Array.au3>
    
    
    $s_String = '<td>60311 Frankfurt am Main Frankfurt am Main</td>' & @CRLF & '<td>36251 Bad Hersfeld Bad Hersfeld</td>' & @CRLF & '<td>20099 Hamburg Hamburg</td>' & @CRLF
    
    
    $a_Array = StringRegExp($s_String, '(?<Ort>[\w ]+)\s\k<Ort>', 3)
    _ArrayDisplay($a_Array, 'Ergebnis')

    Prinzipiell sind Back-References aber ziemlich eklig für die Performance.
    Je nach dem wie groß der String ist könnte die reine RegEx-Lösung daher Oscars Methode hinterherhinken.

  • Die Orte hab ich vorher schon in eine Variable gepackt und die soll im Endeffekt nur überprüft werden. Die Stringlänge beträgt im Schnitt so um die 40-50 Zeichen. Daher ist die Geschichte mit der Performance recht Überschaubar.

    Dein Pattern sieht recht interessant aus. RegExBuddy meint, das es .NET anstatt von PCRE ist. Wie funzt denn sowas?

    cu, Lesato!

  • Das mag valides .Net-RegEx sein - das schließt ja aber nicht aus dass es auch valides PCRE-RegEx ist.
    RegExBuddy kann sich aber nur für eines entscheiden.

    So spannend ist das Pattern aber nicht.
    Etwas anders geschrieben sieht es so aus wie du am Anfang schon selbst vorgeschlagen hast:

    Code
    ([\w ]+)\s\1