我想获得模式的所有出现'[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}'