如何获得此正则是重叠的事件,但不是太多: -



我想获得模式的所有出现'[number]',包括他们的上下文,但我不能。

这是我的代码:

import re
text = 'some crap [00][0] some more'
regex = r'[[0-9]*]'
regex = '.{0,10}' + regex + '.{0,10}'
occurrences = re.findall(regex, text)
for occ in occurrences print(occ)

实际上是错误的!?

我的代码在任何情况下都可以正常工作,除非有两个[数字]块,而两者之间则少于10个字符。当我寻找两个时,我的代码给我一个结果。如果我将正则态度设置为包括重叠的出现,则将为不同上下文长度提供所有结果。我无法专门设置上下文长度,因为我想在字符串的开头和结尾包括出现。

我实际想要的:

我更喜欢一个纯正的正则解决方案,可以使我所有提到模式的出现,包括它们的上下文。

如果真的不可能,我会使用使用位置并从字符串中选择范围的解决方案。

阅读有关非捕捉组和负lookahead的阅读。

要解决您的问题,只需将第四行更改为:

regex = '(?:(?!' + regex + ').){0,10}' + regex + '(?:(?!' + regex + ').){0,10}'

最新更新