0

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

究竟有什么问题!?

我的代码在任何情况下都可以按照我的意愿工作,除非有两个 [number] 块之间的字符少于 10 个。我的代码在寻找两个结果时给了我一个结果。如果我将正则表达式设置为包含重叠事件,那么它将给出不同上下文长度的所有结果。我无法专门设置上下文长度,因为我想在字符串的开头和结尾包含出现的次数。

我真正想要的:

我更喜欢纯正则表达式解决方案来让我了解所有提到的模式的出现,包括它们的上下文。

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

4

1 回答 1

1

阅读有关非捕获组负前瞻的信息。

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

regex = '(?:(?!' + regex + ').){0,10}' + regex + '(?:(?!' + regex + ').){0,10}'
于 2017-11-28T17:36:20.390 回答