我正在使用以下正则表达式:
((FFD8FF).+?((FFD9)(?:(?!FFD8).)*))
我需要使用正则表达式执行以下操作:
FFD8FF
FFD9
之前的最后一个FFD8FF
FFD9
之后不包含任何内容除了在最后一次 FFD9 之后找到并保留任何垃圾之外,我所拥有的可以满足我的需要。我怎样才能让它跳回最后FFD9
?
这是我用这个表达式搜索的字符串:
asdfasdfasasdaFFD8FFasdfalsjdflajsdfljasdfasdfasdfasdfFFD9asdflasdflasdfFFD9asdfasdfFFD8FFasdfalsjdflajsdfljasdfasdfasdfasdfFFD9
非常感谢你的帮助。
更多信息:
我有一个需要搜索的开始值和结束值列表(FFD8FF 和 FFD9 只是一对)。它们在一个列表中。因此,我使用 r.compile 在 for 循环中动态创建表达式,该循环遍历不同的值。我有以下代码,但它返回 0 个匹配项:
regExp = re.compile("FD8FF(?:[^F]|F(?!FD8FF))*FFD9")
matchObj = re.findall(regExp, contents)
在上面的代码中,我只是尝试使用普通的正则表达式,甚至没有从列表中获取值(看起来像这样):
regExp = re.compile(typeItem[0] + "(?:[^" + typeItem[0][0] + "]|" + typeItem[0][0] + "(?!" + typeItem[0] + "))*" + typeItem[1])
任何其他想法为什么没有任何匹配?
编辑:
我发现我忘了包括标志。现在包含标志以忽略大小写和多行。我现在有
regExp = re.compile(typeItem[0] + "(?:[^" + typeItem[0][0] + "]|" + typeItem[0][0] + "(?!" + typeItem[0] + "))*" + typeItem[1],re.M|re.I)
虽然现在我遇到了内存错误。有什么办法可以提高效率吗?我正在使用表达式搜索数十万行(使用findall
上面的表达式)