我试图从文本文件中返回与特定模式不匹配的所有结果,但我在语法上遇到了困难。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_anno%tate5_1375_3.txt plos_annotate6_1032_1.txt第三根弦是我想拉的
3 回答
一只甜甜圈
TA贡献1836条经验 获得超5个赞
如果您可以在 Python 中进行否定,为什么要在正则表达式中进行否定?
strings_without_rx = [s for s in the_strings if not regex1.search(s)]
如果你想扫描文件行,你甚至不需要存储它们,因为一个打开的文件是它的行的可迭代:
with open("some.file") as source:
lines_without_rx = [s for s in source if not regex1.search(s)]
# Here the file is auto-closed.
30秒到达战场
TA贡献1828条经验 获得超6个赞
我建议在您的模式中使用否定前瞻断言:
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_+\.-]+)')
添加回答
举报
0/150
提交
取消