gpt4 book ai didi

python - 在正则表达式模式中获取捕获组的起始位置

转载 作者:行者123 更新时间:2023-11-28 20:47:24 25 4
gpt4 key购买 nike

基本上,我想找到任何子字符串第一次出现的索引:“ABC”、“DEF”或“GHI”,只要它们出现在三个间隔内即可。我为匹配此模式而编写的正则表达式是:

regex = compile ("(?:[a-zA-Z]{3})*?(ABC|DEF|GHI)") 

*? 确保我得到第一个匹配项,因为它是非贪婪的。我正在使用捕获组,因为我认为这是实际获取我实际寻找的(子字符串的)索引的唯一方法。我不关心比赛本身从哪里开始,只关心捕获组从哪里开始。 ...{3}... 要求模式以 3 为间隔出现,即:

example_1 = "BNDABCDJML"

example_2 = "JKMJABCKME"

example_1 将匹配,因为 "ABC" 出现在位置 3 但 example_2匹配,因为 “ABC” 出现在位置 4。

理想情况下,给定字符串:

text = "STCABCFFC"

这个匹配,但是如果我只是得到匹配的开始,它会给我 0,因为那是匹配的开始索引,我想要的是 3

我想这样做:

print match(regex, text).group(1).start()

但是,当然,这不起作用,因为 start() 不是字符串的方法,而且字符串现在独立于 text。我不能简单地在捕获组中搜索子字符串的起始索引,因为这不能保证它遵循正则表达式模式(仅以 3 为间隔出现)。也许我忽略了什么,我不会用 python 写太多东西,所以如果这是一个微不足道的问题,请原谅我。

最佳答案

您可以从 match 对象中获取开始和结束索引 - re.MatchObject.start(group) , re.MatchObject.end(group) :

regex = compile ("(?:[a-zA-Z]{3})*?(ABC|DEF|GHI)") 

for m in re.finditer(regex, "STCABCFFC"):
print m.start(1), m.end(1)
print m.span(1) # Prints 2-element tuple `(start, end)`

关于python - 在正则表达式模式中获取捕获组的起始位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18814344/

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