这让我发疯。

我正在尝试在一系列文档中找到“ DOI”的每个实例,或者扫描错误的等效对象。然后,我想收集术语“ DOI”以及其后最多包含15个字母数字字符。但是,即使它们与之前的比赛重叠,我也需要确保找到它们。

我试图推断以前的解决方案,但又遇到了另一个类似的问题,但没有成功。

Python regex find all overlapping matches?

这是我用来测试的示例。

搜索字符串:

"abhgfigDOI567afkgD0Idhdhfhfhdbvbkab3343432q3DO1fbaguig7ggkgafgkgDOIDOID01OO1"


DOI变体:

DOI|DO1|D01|D0I|001|00I|0O1|0OI|O01|O0I|OO1|OOI


预期成绩:

["DOI567afkgD0Idhdhf",
"D0Idhdhfhfhdbvbkab",
"DO1fbaguig7ggkgafg",
"DOIDOID01OO1",
"DOID01OO1",
"D01OO1",
"001"]


任何帮助将不胜感激!

谢谢!

最佳答案

使用“ DOI变量” DOI | DO1 | D01 | D0I | 001 | 00I | 0O1 | 0OI | O01 | O0I | OO1 | OOI并不是一个好主意。从基础开始:D + 0 + O,O + 0和I + 1。这将立即导致模式“ [D0O] [O0] [I1]”,它更紧凑,更不易出错,并且执行速度更快(如果您想使用Cython或C)。

然后,在这种情况下,您可以使用re.finditer()查找匹配的3个字符的前缀,然后从那里获取。

在更一般的情况下Lead标签应该是DOD而不是DOI,您不能使用re.finditer():

Input text:     DODOD987654321
First match:    DODOD987654321
Second match:     DOD987654321 # Not found by re.finditer()


在最常见的情况下(例如Lead标签是DDD),您需要循环执行re.search(),在成功匹配后将搜索开始位置仅增加1位。

关于python - 正则表达式Python-查找每个关键字实例,提取关键字和后续字符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6172091/

10-12 18:22