当前位置: 首页 > 面试题库 >

python中的“负”模式匹配

卜和悌
2023-03-14
问题内容

我有以下输入,

OK SYS 10 LEN 20 12 43
1233a.fdads.txt,23 /data/a11134/a.txt
3232b.ddsss.txt,32 /data/d13f11/b.txt
3452d.dsasa.txt,1234 /data/c13af4/f.txt
.

我想提取所有输入, 除了 包含“ OK SYS 10 LEN 20”的行和包含单个"."(点)的最后一行。也就是说,我想提取以下内容

1233a.fdads.txt,23 /data/a11134/a.txt
3232b.ddsss.txt,32 /data/d13f11/b.txt
3452d.dsasa.txt.1234 /data/c13af4/f.txt

我尝试了以下方法

for item in output:
    matchObj = re.search("^(?!OK) | ^(?!\\.)", item)
    if matchObj:
        print "got item "  + item

但它不起作用,因为它不会产生任何输出。


问题答案:

实际操作:

matchObj = re.search("^(?!OK|\\.).*", item)

别忘了.*负前瞻,否则您将无法获得任何匹配;-)



 类似资料:
  • 我无法运行此代码: 我在Python中找不到匹配关键字。 我在这里找到的:https://www.python.org/dev/peps/pep-0622/#the-match语句 有什么想法吗?

  • 我正在编写一个Rust程序来收集每个输入行的第一个字,这有点类似于Unix实用程序。 这让我 我读过《不能作为可变借来》一书,因为它也是作为不可变借来的,但我仍然感到困惑:可变借来发生在第10行,而不可变借来发生在第12行,那么“已经作为不可变借来的变量是作为可变借来的”怎么可能发生呢?至少错误应该是“一个已经作为可变(在第10行)借用的变量被作为不可变(在第12行)借用”。

  • 我正在学习函数式编程的入门课程,其中我们使用Haskell。练习的一部分是为输入字符串编写解析器。 然而,我无法解决以下错误,或者得到实际发生的事情。 错误来自这一行: 我期望发生的是,输入字符串被拆分成一个行列表,并传递给parseTrack。然后,parseTrack将使用模式匹配来命名列表中最前面的两个字符串(行)和其他字符串。 然而,我认为正在发生的是finish是列表中的顶部元素,sta

  • 我对Drools中的流模式有一个问题。我在用这个规则 如果我发送MetaMessage,我希望规则在指定的10秒后执行,但不会附加任何内容。如果我发送新的MetaMessage,10秒后,规则将执行。 编辑:如果我改变规则并去掉not,它就像一个符咒 我不知道我做错了什么。 这就是我创建KieBase的方式 编辑2每次在Kafka队列中插入新的元消息时,我都会使用fireAllRules()触发规

  • 模式,是Rust另一个强大的特性。它可以被用在let和match表达式里面。相信大家应该还记得我们在复合类型中提到的关于在let表达式中解构元组的例子,实际上这就是一个模式。 let tup = (0u8, 1u8); let (x, y) = tup; 而且我们需要知道的是,如果一个模式中出现了和当前作用域中已存在的同名的绑定,那么它会覆盖掉外部的绑定。比如: let x = 1; let c

  • 一、模式匹配 Scala 支持模式匹配机制,可以代替 swith 语句、执行类型检查、以及支持析构表达式等。 1.1 更好的swith Scala 不支持 swith,可以使用模式匹配 match...case 语法代替。但是 match 语句与 Java 中的 switch 有以下三点不同: Scala 中的 case 语句支持任何类型;而 Java 中 case 语句仅支持整型、枚举和字符串常