Finde Regex zum Löschen von Duplikaten

Ich möchte die Regex finden, die folgendes Matching macht (Beachten Sie, dass es einen linebreakt gibt!)

InputString:

"a0Ew0" "a0Ew0" "a0Ew0s" "a0Ew0s" 

Ausgabe:

 "a0Ew0" "a0Ew0s" 

  • Finden von gültigen IP-Adressen mit Regex
  • Wie lese ich eine Datei und extrahiere Daten zwischen multiline Muster?
  • Konfiguriere Django URLS.py, um #anchors in URL zu behalten, nachdem es es mit einem Ende /
  • Der Versuch, schöne Suppe (Python) zu verwenden, um 2 Teilspiele in einem Attributwert zu finden
  • Python: Rückkehr volles Wort und nicht nur ein specfic Teil der String (reguläre Ausdrücke)
  • Wie man das übergeordnete HTML-Tag in Python extrahiert, indem du die Zeichenfolge übereinstimmst
  • String-Match-Muster finden
  • Mit regulärem Ausdruck zu Komma trennen eine große Zahl in Süd-asiatische Nummerierung System
  • 5 Solutions collect form web for “Finde Regex zum Löschen von Duplikaten”

    Sie können die Liste in einen Satz umwandeln, um Duplikate loszuwerden

    Siehe folgendes: https://repl.it/FFOJ/0

     l = set(["a0Ew000001UD2t8EAD", "a0Ew000001UD2t8EAD", "a0Ew000001UD4AFEA1", "a0Ew000001UD4AFEA1"]) print(l) 

    Regex ist in diesem Fall nicht das richtige Werkzeug.

    Wenn die doppelten Elemente aufeinanderfolgend sind, können Sie ein einfaches Listenverständnis verwenden, um dies zu erreichen:

     lines=""""a0Ew000001UD2t8EAD" "a0Ew000001UD2t8EAD" "a0Ew000001UD4AFEA1" "a0Ew000001UD4AFEA1" """.splitlines() filtered = [l for i,l in enumerate(lines) if i==0 or lines[i-1]!=l ] 

    Es schafft das Element nur, wenn es das erste ist (daher der Index == 0 Test oder wenn das vorherige Element von dem aktuellen abweicht).

    Ergebnis:

     ['"a0Ew000001UD2t8EAD"', '"a0Ew000001UD4AFEA1"'] 

    Du brauchst keine Regex, um das zu tun, wenn du das machen kannst:

     from collections import OrderedDict inputString = """"a0Ew0" "a0Ew0" "a0Ew0s" "a0Ew0s" """ ls = inputString.split("\n") #splits the string to a list print(*(list(OrderedDict.fromkeys(ls)))) 

    Ausgabe:

     "a0Ew0" "a0Ew0s" 

    Wenn Sie wirklich wirklich Regex verwenden möchten, können Sie einen negativen Lookahead (?!...) , um zu überprüfen, ob die aktuelle Gruppe (".+") Nicht von einem Zeilenumbruch \n und selbst \1 gefolgt wird.

     >>> inpt = """"a0Ew000001UD2t8EAD" "a0Ew000001UD2t8EAD" "a0Ew000001UD2t8EAD" "a0Ew000001UD4AFEA1" "a0Ew000001UD4AFEA1" "a0Ew000001UD2t8EAD" """ >>> re.findall(r'(".+")(?!\n\1)', inpt) ['"a0Ew000001UD2t8EAD"', '"a0Ew000001UD4AFEA1"', '"a0Ew000001UD2t8EAD"'] 

    Aber stattdessen würde ich lieber vorschlagen, zB itertools.groupby :

     >>> [key for key, group in itertools.groupby(inpt.splitlines())] ['"a0Ew000001UD2t8EAD"', '"a0Ew000001UD4AFEA1"', '"a0Ew000001UD2t8EAD"'] 

    (Beachten Sie, wie ich eine weitere Kopie der ersten Zeile an das Ende des Datensatzes hinzugefügt habe, um zu zeigen, dass diese beiden Lösungen nur Zeilen als Duplikate betrachten, sie erscheinen direkt hintereinander, mit nichts dazwischen. Wenn Sie auch entfernen möchten Duplikate mit verschiedenen Zeilen dazwischen, ich bezweifle, dass es eine Lösung mit Regex geben würde.)

    REGEXP: Python

     (\w+) 

    Wenn aufeinanderfolgend, kannst du gerade oder ungerade Elemente entfernen.
    Sogar

     [0]"a0Ew0ssss" <-- Deleted [1]"a0Ew0ssss" [2]"a0Ew0" <-- Deleted [3]"a0Ew0" [4]"a0Ew0s" <-- Deleted [5]"a0Ew0s" 

    Ergebnis:

     [0]"a0Ew0ssss" [1]"a0Ew0" [2]"a0Ew0s" 
    Python ist die beste Programmiersprache der Welt.