如何让这个正则表达式包括重叠的事件,但不要太多:-?
How to get this regex include overlapping occurrences, but not too much:-?
我想获取所有出现的模式“[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 个。当我正在寻找两个时,我的代码给了我一个结果。如果我将正则表达式设置为包含重叠事件,那么它将给出不同上下文长度的所有结果。我无法专门设置上下文长度,因为我想包括字符串开头和结尾的匹配项。
我真正想要的是:
我更喜欢纯正则表达式解决方案来获取上述模式的所有出现,包括它们的上下文。
如果真的不可能,我会使用使用位置并从字符串中选择范围的解决方案。
了解 non-capturing group and negative lookahead。
要解决您的问题,只需将第四行更改为:
regex = '(?:(?!' + regex + ').){0,10}' + regex + '(?:(?!' + regex + ').){0,10}'
我想获取所有出现的模式“[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 个。当我正在寻找两个时,我的代码给了我一个结果。如果我将正则表达式设置为包含重叠事件,那么它将给出不同上下文长度的所有结果。我无法专门设置上下文长度,因为我想包括字符串开头和结尾的匹配项。
我真正想要的是:
我更喜欢纯正则表达式解决方案来获取上述模式的所有出现,包括它们的上下文。
如果真的不可能,我会使用使用位置并从字符串中选择范围的解决方案。
了解 non-capturing group and negative lookahead。
要解决您的问题,只需将第四行更改为:
regex = '(?:(?!' + regex + ').){0,10}' + regex + '(?:(?!' + regex + ').){0,10}'