我已经阅读了所有相关的帖子并搜索了互联网,但这真的让我感到震惊。
我有一些包含日期的文本。
我想捕获日期,但如果它前面有某个短语,则不是。
一个直截了当的解决方案是在我的 RegEx 中添加一个否定的lookbehind。
以下是一些示例(使用 findall)。
如果日期前面没有短语“as of”,我只想捕获日期。
19-2-11
某事 15-4-11
诸如此类 29-5-11
这是我的正则表达式:
(?<!as of )(\d{1,2}-\d{1,2}-\d{2})
预期成绩:
['19-2-11']
['15-4-11']
[]
实际结果:
['19-2-11']
['15-4-11']
['9-5-11']
请注意,这是 9 而不是 29。如果我更改\d{1,2}
为类似于\d{2}
第一个模式的实体:
bad regex for testing: (?<!as of )(\d{2}-\d{1,2}-\d{2})
然后我得到了我的预期结果。当然这不好,因为我想匹配 2 位数的天数和个位数的天数。
显然,我的消极后视非常贪婪 - 比我的日期捕获更重要,所以它从中窃取了一个数字并失败了。我已经尝试了所有纠正我能想到的贪婪的方法,但我只是不知道如何解决这个问题。
我希望我的日期捕获与最大的贪婪相匹配,然后应用我的负面回顾。这可能吗?我的问题似乎很好地利用了负面的后视,而不是过于复杂。如果必须的话,我确信我可以用另一种方式完成它,但我想学习如何做到这一点。
如何使 Python 的消极后视不那么贪婪?