RegEx: Linie nach bestimmter Linie

  • Hallo zusammen

    ich brüte schon stundenlang über einer RegEx Abfrage eines aus dem Clipboard kopierten Strings. Die Lösung ist vermutlich ziemlich einfach, trotzdem fand ich sie trotz stundenlangem googeln und probieren nicht raus. Vielleicht kann mir hier ja bitte jemand weiterhelfen:

    Der Text aus dem Clipboard besteht aus vielen Linien. Ich müsste nun den String nach "Vorname / Name" durchsuchen. Dann kommt in der folgenden Linie Vor- und Nachnamen, der teils aus mehreren Vornamen und Hauptnamen besteht, jedoch ist in dieser Linie stets alles in Grossschrift. Diese Linie mit den Namen müsste ausgelesen werden. Bins mit dem String Regular Expression Tester am ausprobieren, mit folgenden Versuchen, teils mit/ohne Klammern, statt . A-Z, usw.:

    Code
    StringRegExp($Value, "(Name / Vorname)\s^.*$", 1)
    StringRegExp($Value, "Name / Vorname\s^A-Z*$", 1)
    StringRegExp($Value, "(Name / Vorname)\s^(A-Z)*$", 1)
    StringRegExp($Value, "Name / Vorname\s.*$", 1)

    Leider bekomme ich entweder immer nur einen Fehler (0) oder sonst nur "Name / Vorname" ausgegeben.

    Kann mir bitte jemand weiterhelfen und sagen, was ich hier falsch mache? Ist für einen Profi wohl ein Anfängerproblem. Aber Danke schon jetzt mal.

    Dani

    Roli von Gunten

    << Alles Gute kommt von Gunten >>

  • Die Variable $Text ist hier vermutlich falsch, eigentlich wird dort über ClipGet() der Inhalt des Clipboards geladen, wie dort dann Zeilenumbrüche erfasst werden, ist mir nicht ganz klar, ausprobieren geht im Moment nicht, da ich dann den Firmen-PC bräuchte. Aber in dieser Form, wie die Variable $Text hier dargestellt ist, funktioniert sie ja nicht, muss ja aber die Zeilenumbrüche trotzdem darstellen.

    Roli von Gunten

    << Alles Gute kommt von Gunten >>

    • Offizieller Beitrag

    So:

    AutoIt
    Local $sText = "Personalien / Kontaktdaten des Kandidaten" & @CRLF & "Name / Vorname" & @CRLF & "MUSTER HANS PETER" & @CRLF & "Staatsangehörigkeit" & @CRLF & "CH" & @CRLF & "Adresse" & @CRLF & "Musterstr. 9, 8001 Zürich" & @CRLF & "Mobiltelefon" & @CRLF & "+41 79 999 99 99" & @CRLF
    
    Local $sName = StringRegExpReplace($sText, '(?s).+Name / Vorname\v+(.+?)\v.*', '$1')
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $sName = "' & $sName & '"' & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    Local $sStaatsangehoerigkeit = StringRegExpReplace($sText, '(?s).+Staatsangehörigkeit\v+(.+?)\v.*', '$1')
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $sStaatsangehoerigkeit = "' & $sStaatsangehoerigkeit & '"' & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    Local $sAdresse = StringRegExpReplace($sText, '(?s).+Adresse\v+(.+?)\v.*', '$1')
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $sAdresse = "' & $sAdresse & '"' & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    Local $sMobil = StringRegExpReplace($sText, '(?s).+Mobiltelefon\v+(.+?)\v.*', '$1')
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $sMobil = "' & $sMobil & '"' & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
  • So:

    AutoIt
    Local $sText = "Personalien / Kontaktdaten des Kandidaten" & @CRLF & "Name / Vorname" & @CRLF & "MUSTER HANS PETER" & @CRLF & "Staatsangehörigkeit" & @CRLF & "CH" & @CRLF & "Adresse" & @CRLF & "Musterstr. 9, 8001 Zürich" & @CRLF & "Mobiltelefon" & @CRLF & "+41 79 999 99 99" & @CRLF
    
    Local $sName = StringRegExpReplace($sText, '(?s).+Name / Vorname\v+(.+?)\v.*', '$1')
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $sName = "' & $sName & '"' & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    Local $sStaatsangehoerigkeit = StringRegExpReplace($sText, '(?s).+Staatsangehörigkeit\v+(.+?)\v.*', '$1')
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $sStaatsangehoerigkeit = "' & $sStaatsangehoerigkeit & '"' & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    Local $sAdresse = StringRegExpReplace($sText, '(?s).+Adresse\v+(.+?)\v.*', '$1')
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $sAdresse = "' & $sAdresse & '"' & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    Local $sMobil = StringRegExpReplace($sText, '(?s).+Mobiltelefon\v+(.+?)\v.*', '$1')
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $sMobil = "' & $sMobil & '"' & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console

    Oscar Regex-Gott :party::party::party:

    • Offizieller Beitrag

    Oscar Regex-Gott

    Nein! Das denke ich nicht.

    Als ich mit AutoIt anfing, waren RegExp-Pattern für mich auch ein Buch mit sieben Siegeln.

    Mit der Zeit eignet man sich einige Erfahrungen an, die mit RegExp zum gewünschten Erfolg führen.

    Zu den Erfahrungen gehört aber auch, dass man die "Extremwerte" bei dem String kennen muss, um ein 100%-Pattern hinzubekommen.

    Deswegen ist es wichtig, die Ausgangsdaten ganz genau zu analysieren. Bei dem obigen Pattern, muss beispielsweise immer ein Eintrag vorhanden sein. Ein Leerstring anstelle der Daten würde zum Fehlschlag führen.

    Wenn man mit RegExp arbeiten will, dann muss man alle Eventualitäten mit einkalkulieren, sonst führt das oft zu merkwürdigen Fehlern im Programm.