【问题标题】:Regex "NOT" in Google Sheets (RE2)Google表格(RE2)中的正则表达式“NOT”
【发布时间】:2019-07-17 01:04:08
【问题描述】:

我想检查一个单元格中是否有一个单词而不是另一个单词。在this post 中有一些关于这个问题的讨论,但选定的解决方案包括一个脚本函数。必须有一种更简单的方法来做到这一点。

我想检查字符串“investimentos”中是否存在字符串“investimentos”而“fundos”不存在。

我已经尝试过以下方法(免责声明:我是正则表达式的初学者):

=regexmatch("investimentos";"(investimentos)^(fundos)")
=regexmatch("investimentos";"(investimentos).*^(fundos)")
=regexmatch("investimentos";"(investimentos)(^fundos)")
=regexmatch("investimentos";"(investimentos).*(^fundos)")

我总是说谎。这是为什么呢?

【问题讨论】:

  • 与我之前的回答相同:RE2 中没有环视支持,因此您不能在 RE2 表达式中使用该逻辑。使用=AND(REGEXMATCH(A1;"word1");NOT(REGEXMATCH(A1;"word2")))
  • 谢谢。你又来了。
  • 如果否定值只有 1 个字符,您可以使用单个正则表达式来执行此操作。就像^[^I]*GO[^I]*$ 将匹配一个没有I 但包含GO 的字符串,但如果该单词中有多个字符,它将不起作用。
  • 关于这个问题的编辑,我已经放弃了标题,即使我倾向于认为全大写的材料有点吵闹。但是,我已经删除了对读者“照亮它”的要求,因为它相当模糊,不像“为什么 X 发生”那么容易理解。我们有关于模糊问题的指导in this discussion,值得一读。

标签: regex google-sheets google-sheets-formula re2


【解决方案1】:

RE2 不支持环视,因此您不能使用match one string excluding another 的通用逻辑。

如果否定值只有 1 个字符,您可以使用单个正则表达式来做到这一点。就像^[^I]*GO[^I]*$ 会匹配一个没有I 但包含GO 的字符串,但是如果您要排除的单词中有多个字符,它将不起作用。

使用

=AND(REGEXMATCH(A1;"investimentos");NOT(REGEXMATCH(A1;"fundos")))

【讨论】:

    【解决方案2】:

    试试:

    =(REGEXMATCH(A1; "investimentos"))*(NOT(REGEXMATCH(A1; "fundos")))
    

    或:

    =(REGEXMATCH(A1; "investimentos"))*(REGEXMATCH(A1; "[^fundos]"))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-25
      • 2019-10-09
      • 2020-04-18
      • 2023-01-31
      • 1970-01-01
      • 2021-05-30
      相关资源
      最近更新 更多