gpt4 book ai didi

正则表达式:不包含匹配词

转载 作者:行者123 更新时间:2023-12-04 23:18:46 24 4
gpt4 key购买 nike

我有以下几句话:

EFI Internal Shell
EFI Hard Drive
EFI Drive

我想匹配包含EFI但不包含Drive的单词。因此,仅首字母(EFI内部 shell )应匹配。

如何在正则表达式中完成此操作?

我浏览了SO,但没有一个答案能使我走上正确的轨道。

例如: Regular expression that doesn't contain certain string表示要使用 ^((?!my string).)*$,但要使用 didn't work。甚至匹配不包含Drive的任何字符串。

有小费吗?

最佳答案

您的^((?!Drive).)*$根本不起作用,因为您已针对多行输入进行了测试。

您应该使用/m修饰符查看what the regex matches。它仅匹配不包含Drive的行,但该调和的贪婪 token 不会检查EFI是否在字符串内。

实际上,这里的$ anchor 是多余的,因为.*匹配除换行符以外的任何零个或多个字符。您可以简单地将其从样式中删除。

(注意:在.NET中,您将需要使用[^\r\n]*而不是.*,因为.NET模式中的.匹配任何字符,但换行符LF,char并匹配所有其他换行符,例如回车符,CR , 等等。)。

使用类似

^(?!.*Drive).*EFI.*

或者,如果您只需要在整个 单词出现 Drive的情况下使匹配失败,即可:
^(?!.*\bDrive\b).*EFI.*

或者,如果有更多的话,您想通过以下方式来发出失败的信号:
^(?!.*(?:Drive|SomethingElse)).*EFI.*
^(?!.*\b(?:Drive|SomethingElse)\b).*EFI.*

参见 regex demo

这里,
  • ^-匹配字符串
  • 的开头
  • (?!.*Drive)-确保字符串中没有“Drive”(因此,不允许使用Drives)
  • (?!.*\bDrive\b)-确保字符串中的整个单词都没有“Drive”(因此,允许使用Drives)
  • .*-除换行符以外的任何0+个字符,尽可能多
  • EFI-一个EFI子字符串
  • .*-尽可能多的除换行符以外的0+个字符。

  • 如果您的字符串包含换行符,请使用 /s dotall修饰符或将 .替换为 [\s\S]

    关于正则表达式:不包含匹配词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33159862/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com