我的消极展望不起作用为什么?

2024-07-02 12:57:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个分散着各种字符串、日期、制表符和语言代码的文本。我想提取日期+制表符组合后面的字符串,后面跟一个语言代码,比如“[en]”,一个制表符,之后我们就没有字符串“坏东西”(例如,“2020-01-12\t我们需要[en]\t好东西”,而不是“2020-01-12\t我们不需要[en]\t坏东西”

以下是我正在使用的简短示例文本:

\n2021-01-12\t不需要此字符串[it]\tBad things\tBad things\n2021-01-12\t也不需要此字符串[en]\tBad things\tBad things\n2021-01-11\t需要的字符串1![它]\t需要的字符串1!此处重复\t此处不感兴趣\n2021-01-11\t需要的字符串2[fr]\t需要的字符串2在此处重复\t必要的字符串\n2021-01-11\t需要的字符串3。。。[ru]\t需要的字符串3。。。此处重复\t我们不感兴趣的另一部分

我制作这个正则表达式是为了捕获日期和语言代码之间的所有字符串:

(\d{4}-\d{2}-\d{2}\\t)(.*?)(\[\w{2}\]\\t)

这很好(见here)。然而,当我添加一个否定的前瞻来排除后面跟着“坏东西”的部分时,我所有的正则表达式都变南了:

(\d{4}-\d{2}-\d{2}\\t)(.*?)(\[\w{2}\]\\t)(?!Bad things)

您可以看到结果here。我知道我的前瞻性让正则表达式变得贪婪,但我不知道如何避免这种情况,添加一个?在它不起作用之后。你能帮我吗


Tags: 字符串代码文本语言示例hereruit
1条回答
网友
1楼 · 发布于 2024-07-02 12:57:45

不确定这是否涵盖所有情况,但这似乎有效:

(\d{4}-\d{2}-\d{2}\\t)([^][]*)(\[\w{2}\]\\t)(?!Bad things)

演示here

说明:

(\d{4}-\d{2}-\d{2}\\t)   date and tab
([^][]*)                 collect only things that do not contain chars `[` and `]`   
(\[\w{2}\]\\t)           follow up [<tag>]
(?!Bad things)           Negative Lookahead

相关问题 更多 >