2017-01-30 2 views
1

Ich möchte wissen, ob es einen Weg gibt, die ich Regex verwenden können einen regulären Ausdruck Suchzeichenfolge für Anagramme zu erstellen.erstellen Regex Suchbegriff mit Regex in google Blatt

Passend zu diesem Beitrag: Regex - find anagrams and sub-anagrams

Ich habe erstellt this spreadsheet mit dem Wort Datenbank

Die Regex für Anagramme von Akne zu suchen ist: "^(?!.*a.*a)(?!.*c.*c)(?!.*n.*n)(?!.*e.*e)[acne]*$" (aus der oben genannten Frage Stackoverflow).

Ich möchte Regexreplace verwenden, um von "Akne" (oder Speck oder was auch immer Zeichenfolge von Briefen zu bekommen) "^(?!.*<letter1>.*<letter1>)<repeat for each letter>[<letterstring>]*$"?

Wenn versucht regexreplace("acne",".",".*") aber das .*.*.*.* offensichtlich zurückgibt. Und was ich suchte ist .*a.*c.*n.*e um dann von dort weiter extrapolieren zu "^(?!.*a.*a)(?!.*c.*c)(?!.*n.*n)(?!.*e.*e)[acne]*$"

zu bekommen Offensichtlich würde ich liebe es, den Teil mehr als Dilemma lösen zu: ^(?!.*([agoid]).*\1)(?!(.*m){3})[magoid]*$ aber nicht sicher, wie einfach das mit Wiederholungs Buchstaben sein.

+0

Können Sie die Tabelle teilen bitte? –

+0

Entschuldigung, ich dachte, ich hätte es getan. Es ist jetzt geteilt. – Reenen

Antwort

1

Meinst du so?

="^(?!.*" & 
    JOIN(")(?!.*", 
     ArrayFormula(SPLIT(
     REGEXREPLACE(A1, 
         "(\w)", "$1~"), 
     "~") & ".*" & 
     SPLIT(
     REGEXREPLACE(A1, 
         "(\w)", "$1~"), 
     "~"))) & 
")[" & A1 & "]*$" 

F1: REGEXREPLACE(A1, "(\w)", "$1~"), legt eine Tilde als Trennzeichen zwischen jedem Buchstaben

F2: SPLIT(<F1>, "~") das Wort in ein Array aufspaltet

F3: ARRAYFORMULA(<F2> & ".*" & <F2>) ein Array von <letter_i>.*<letter_i>

F4 erzeugt: JOIN(")(?!.*", <F3>) tritt in die Anordnung zusammen mit den benötigten Separatoren

"^(?!.*" & <F4> & ")[" & A1 & "]*$" hängt den Anfang und das Ende an.

bearbeiten

An diesem Punkt Sie könnte genauso gut

überprüfen
= JOIN(, SORT(TRANSPOSE(SPLIT(REGEXREPLACE(A1, "(\w)", "$1~"), "~")))) = 
    JOIN(, SORT(TRANSPOSE(SPLIT(REGEXREPLACE(B1, "(\w)", "$1~"), "~")))) 
+0

Wow Mann, wenn ich dir 1000 upvotes geben kann, würde ich! Das ist großartig. Und nicht nur die Regex, die Blätter funktionieren auch. Ich muss mehr über Regex lesen. – Reenen