Python 如何返回与特定模式不匹配的字符串列表?

Python 如何返回与特定模式不匹配的字符串列表?,python,regex-negation,Python,Regex Negation,我试图从文本文件中返回与特定模式不匹配的所有结果,但语法有困难 pattern is [A-Z]+\_[A-Z0-9]+\_[0-9]+\_[0-9]+\.[A-Z]{3} 尝试了以下操作但未成功: '^(?![A-Z]+\_[A-Z0-9]+\_[0-9]+\_[0-9]+\.[A-Z]{3}$).*$' r'^(?!([A-Z]+\_[A-Z0-9]+\_[0-9]+\_[0-9]+\.[A-Z]{3}).)*$' 下面是匹配模式的代码,现在我需要找到所有不匹配的条目 pattern

我试图从文本文件中返回与特定模式不匹配的所有结果,但语法有困难

pattern is [A-Z]+\_[A-Z0-9]+\_[0-9]+\_[0-9]+\.[A-Z]{3}
尝试了以下操作但未成功:

'^(?![A-Z]+\_[A-Z0-9]+\_[0-9]+\_[0-9]+\.[A-Z]{3}$).*$'

r'^(?!([A-Z]+\_[A-Z0-9]+\_[0-9]+\_[0-9]+\.[A-Z]{3}).)*$'
下面是匹配模式的代码,现在我需要找到所有不匹配的条目

pattern = r'[A-Z]+\_[A-Z0-9]+\_[0-9]+\_[0-9]+\.[A-Z]{3}'

regex1 = re.compile(pattern, flags = re.IGNORECASE)

regex1.findall(text1)
数据样本如下:

plos_annotate5_1375_1.txt plos_annotate5_1375_2.txt plos_annotate5_1375_3.txt plos_annotate6_1032_1.txt


第三个字符串是我想拉出来的

您可以检查您的正则表达式是否匹配:

if regex.match(text1) is None:
    # Do magic you need

您只需检查您的正则表达式是否不匹配:

if regex.match(text1) is None:
    # Do magic you need

如果可以在Python中进行否定,为什么要在regexp中进行否定

strings\u不带\u rx=[s代表\u字符串中的s(如果不是regex1.search)]
如果要扫描文件行,甚至不需要全部存储,因为打开的文件是其行的一部分:

以open(“some.file”)作为源代码:
行_不带_rx=[s代表源中的s,如果不是regex1.search]
#这里的文件是自动关闭的。

如果可以在Python中进行否定,为什么要在regexp中进行否定

strings\u不带\u rx=[s代表\u字符串中的s(如果不是regex1.search)]
如果要扫描文件行,甚至不需要全部存储,因为打开的文件是其行的一部分:

以open(“some.file”)作为源代码:
行_不带_rx=[s代表源中的s,如果不是regex1.search]
#这里的文件是自动关闭的。

我建议在您的模式中使用消极前瞻断言

r'(?![A-Z]+\_[A-Z0-9]+\_[0-9]+\_[0-9]+\.[A-Z]{3}[^A-Za-z0-9_+\.-]+)'
如果您将其与
findall
一起使用,则不使用任何循环,它将为您提供所有不匹配的模式:

re.findall(r'(?![A-Z]+\_[A-Z0-9]+\_[0-9]+\_[0-9]+\.[A-Z]{3}[^A-Za-z0-9_+\.-]+)')

我建议在您的模式中使用消极前瞻断言

r'(?![A-Z]+\_[A-Z0-9]+\_[0-9]+\_[0-9]+\.[A-Z]{3}[^A-Za-z0-9_+\.-]+)'
如果您将其与
findall
一起使用,则不使用任何循环,它将为您提供所有不匹配的模式:

re.findall(r'(?![A-Z]+\_[A-Z0-9]+\_[0-9]+\_[0-9]+\.[A-Z]{3}[^A-Za-z0-9_+\.-]+)')

当我运行上面的结果时,下面的结果是来自.txt文件的数据。当我运行上面的结果时,下面的结果是来自.txt文件的数据。谢谢vurmux。下面是对我有用的代码:data=regex.split(text1)for line in data:if regex1.match(line)为None:print(line)谢谢vurmux。下面是为我工作的代码:data=regex.split(text1)用于数据行:如果regex1.match(line)为None:print(line)