【问题标题】:Create Regex search string with Regex in google sheet在谷歌表中使用正则表达式创建正则表达式搜索字符串
【发布时间】:2017-06-15 19:06:39
【问题描述】:

我想知道是否可以使用正则表达式为字谜创建正则表达式搜索字符串。

与这篇文章相关: Regex - find anagrams and sub-anagrams

我用数据库这个词创建了this spreadsheet

搜索痤疮字谜的正则表达式是:"^(?!.*a.*a)(?!.*c.*c)(?!.*n.*n)(?!.*e.*e)[acne]*$"(来自上述 stackoverflow 问题)。

我想使用 regexreplace 从“acne”(或培根或任何要到达的字母字符串)"^(?!.*<letter1>.*<letter1>)<repeat for each letter>[<letterstring>]*$"?

如果尝试regexreplace("acne",".",".*"),但显然返回.*.*.*.*。我正在寻找的是.*a.*c.*n.*e,然后从那里进一步推断到"^(?!.*a.*a)(?!.*c.*c)(?!.*n.*n)(?!.*e.*e)[acne]*$"

显然,我也希望它能够解决多字母难题:^(?!.*([agoid]).*\1)(?!(.*m){3})[magoid]*$,但不确定重复字母会变得多么容易。

【问题讨论】:

  • 可以分享一下电子表格吗?
  • 对不起,我以为我做到了。现已共享。

标签: regex google-sheets


【解决方案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~"), "~"))))

【讨论】:

  • 哇,伙计,如果我能给你 1000 个赞,我会的!这真太了不起了。不仅是正则表达式,工作表也起作用。我必须阅读更多关于 Regex 的内容。
猜你喜欢
  • 1970-01-01
  • 2013-04-14
  • 1970-01-01
  • 1970-01-01
  • 2014-02-08
  • 2020-03-06
  • 1970-01-01
  • 1970-01-01
  • 2022-11-21
相关资源
最近更新 更多