如果存在单词,则匹配,但仅当它与文本文件中的其他单词不匹配时

时间:2018-07-26 09:48:33

标签: python regex

我想知道如何针对以下问题使用Python创建RegEx:

我有一个带有数据的文本文件,正则表达式仅在以下情况下匹配:

  • 它具有正确的ID
  • 并且在文本文件中不包含特定的value2或value3(可以在任何地方出现)

文本文件:

blabla
ID
blabla
...
blabla
value1
blabla
...
blabla
value2
blabla
...

(?<!\n)(\n.*(ID)(?!\n.*(value2|value3).*)

有效,但仅当value2或value3位于行ID之前或之后的行中。

那么,如何查找行ID之前和之后的任何行?该解决方案应该适合单行代码,例如我上面的尝试。

2 个答案:

答案 0 :(得分:0)

请更改标题,因为它会误导您,从文本文件中获取ID

可能重复 Python - search txt.file for ID, then return variable from line below

编写记录时,您的文本文件应具有标准结构或格式。 @Blender在Writing a dict to txt file and reading it back中的解释 或使用字典格式可以帮助简化下次读取文件时识别ID和值的过程。

Nicely formatted text file,使用循环,然后读取每一行,然后执行split和dict。

注意:想要写评论,但声誉不够

答案 1 :(得分:0)

我相信

^(?![\s\S]*(value2|value3))[\s\S]*(ID)[\s\S]*

应该可以满足您的需求。

Python documentation on Regular expression operations包含有关\s(与空白字符匹配)和\S(与非空白字符匹配)的详细信息。

在此Stack Overflow帖子中,有很多关于负前行的信息-开头的(?!...)位:Regex lookahead, lookbehind and atomic groups