gpt4 book ai didi

python - Regex Python - 查找每个关键字实例,提取关键字和后续字符

转载 作者:行者123 更新时间:2023-12-01 06:10:33 24 4
gpt4 key购买 nike

这让我发疯。

我正在尝试在一系列文档中查找“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 字符前缀,并从那里获取它。

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

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

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

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com