2017-01-30 108 views
1

我想知道是否有一種方法可以使用正則表達式爲字形創建正則表達式搜索字符串。在Google工作表中使用正則表達式創建正則表達式搜索字符串

與此相關的帖子: Regex - find anagrams and sub-anagrams

我創建this spreadsheet與詞庫

正則表達式搜索痤瘡的字謎是:"^(?!.*a.*a)(?!.*c.*c)(?!.*n.*n)(?!.*e.*e)[acne]*$"(從上述計算器的問題)。

我想使用regexreplace從「痤瘡」(或培根或任何字母串來得到)"^(?!.*<letter1>.*<letter1>)<repeat for each letter>[<letterstring>]*$"

如果試過regexreplace("acne",".",".*")但明顯返回.*.*.*.*。而我一直在尋找的是.*a.*c.*n.*e來然後從那裏進一步推斷去"^(?!.*a.*a)(?!.*c.*c)(?!.*n.*n)(?!.*e.*e)[acne]*$"

顯然我喜歡它解決multiletter困境太:^(?!.*([agoid]).*\1)(?!(.*m){3})[magoid]*$但不知道如何容易,這將是有重複的字母。

+0

可以共享電子表格好嗎? –

+0

對不起,我以爲我做到了。現在共享。 – Reenen

回答

1

你的意思是這樣嗎?

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

F1:REGEXREPLACE(A1, "(\w)", "$1~"),把一個波浪線爲每個字母

F2之間的隔板:SPLIT(<F1>, "~")拆分字到一個數組

F3:ARRAYFORMULA(<F2> & ".*" & <F2>)創建<letter_i>.*<letter_i>

F4的數組: JOIN(")(?!.*", <F3>)將陣列連同所需的分離器一起加入

"^(?!.*" & <F4> & ")[" & A1 & "]*$"追加開頭和結尾。

編輯

這時你不妨檢查

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

哇,如果我可以給你1000 upvotes我會的!這真太了不起了。而不僅僅是正則表達式,表單也起作用。我必須更多地閱讀正則表達式。 – Reenen

相關問題