为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕尼黑5688855 2021-12-29 18:13:20
我试图从文本文件中返回与特定模式不匹配的所有结果,但我在语法上遇到了困难。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.


查看完整回答
反对 回复 2021-12-29
?
翻阅古今

TA贡献1780条经验 获得超5个赞

您可以检查您的正则表达式是否不是数学运算:

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


查看完整回答
反对 回复 2021-12-29
?
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_+\.-]+)')


查看完整回答
反对 回复 2021-12-29
  • 3 回答
  • 0 关注
  • 188 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信