【问题标题】:Regex return sucess if there is none of the keywords如果没有关键字,正则表达式返回成功
【发布时间】:2013-01-23 13:58:37
【问题描述】:

我有三个文本文件

文件 1:AAA BBB CCC DDD EEEE

文件 2:AAA BBB CCC DDD FFFF

文件 3:AAA BBB CCC DDD

我正在搜索一个在“文件 3”上返回成功的正则表达式,因为它不包含“EEEE”和“FFFF”

我尝试过这种(没有成功),如果没有后缀“EEEE”或“FFFF”则匹配

(?!EEEE|FFFF)

我搜索更多,我找到了匹配的确切正则表达式,我想反转这个正则表达式:

(.*?EEEE.*?|.*?FFFF.*?)

有什么建议吗? 提前感谢您的帮助

【问题讨论】:

  • 你使用什么语言?
  • 大多数语言都有一个 .Contains() 函数,为什么不使用它呢?
  • 它是在 Expresso 软件中使用的纯正则表达式(无特定语言)。实际上,程序在配置文件中加载正则表达式来识别文件格式。它适用于 90% 的情况,但我没有找到用于测试单词缺失的语义。我无法修改程序以包含 contains() 函数。

标签: regex


【解决方案1】:

我不确定您的所有数据是什么样的,但请尝试 ^((?!EEEE|FFFF).)*$

【讨论】:

  • 这适用于您使用 python 的 re.match 提供的示例
  • 当我在 python 中使用 re.match('^((?!EEEE|FFFF).)*$', 'File 1: AAA BBB CCC DDD') 时,它会为我返回匹配项.如果我在字符串末尾添加 EEEE 或 FFFF,则不会。
【解决方案2】:

我找到了激活多行选项的部分解决方案

^(?!.*EEEE.*|.*FFFF.*).*?$

解释:

^ : 开始字符串

(?!) : 如果没有后缀则匹配

.*EEEE.*|.*FFFF.* :排除的后缀是从 2 个备选方案中选择的任何字符 EEEE 或 FFFF 后跟任何字符

.*? : 任意字符,尽可能少的重复

$ : 结束行或字符串

【讨论】:

    猜你喜欢
    • 2018-03-18
    • 2016-10-10
    • 2019-05-26
    • 1970-01-01
    • 2017-11-22
    • 1970-01-01
    • 2016-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多