【发布时间】:2013-09-15 15:54:07
【问题描述】:
基本上,我想找到任何子字符串第一次出现的索引:“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写太多,如果这是一个琐碎的问题,请见谅。
【问题讨论】: