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" 

  • Python Regex ersetzt Zeichenfolge, die nicht übereinstimmen sollte
  • Match-Schrägstrich mit Python-Regex
  • Match irgendwie EXCEPT eine Folge von Perioden oder Ellipsen
  • Zusammenpassende verschachtelte Strukturen mit regulären Ausdrücken in Python
  • Python regelmäßiger Ausdruck für Domainnamen
  • Auflistung aller Muster, die ein Regex entspricht
  • Erstellen Sie ein Dataframe aus HTML-Tabelle in Python
  • Python \ ufffd nach dem Austausch mit chinesischen Inhalten
  • 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.