Python 获取正则表达式模式中捕获组的开始位置
基本上,我想找到任何子字符串第一次出现的索引:“ABC”、“DEF”或“GHI”,只要它们以三个间隔出现。我为匹配此模式而编写的正则表达式是:Python 获取正则表达式模式中捕获组的开始位置,python,regex,Python,Regex,基本上,我想找到任何子字符串第一次出现的索引:“ABC”、“DEF”或“GHI”,只要它们以三个间隔出现。我为匹配此模式而编写的正则表达式是: regex = compile ("(?:[a-zA-Z]{3})*?(ABC|DEF|GHI)") *?确保我获得第一个匹配,因为它不是贪婪的。我使用的是一个捕获组,因为我假设这是实际获取(子字符串的)索引的唯一方法。我不在乎比赛从哪里开始,只在乎抓捕小组从哪里开始。…{3}…命令模式以3的间隔出现,即: example_1 = "BNDABCDJ
regex = compile ("(?:[a-zA-Z]{3})*?(ABC|DEF|GHI)")
*?
确保我获得第一个匹配,因为它不是贪婪的。我使用的是一个捕获组,因为我假设这是实际获取(子字符串的)索引的唯一方法。我不在乎比赛从哪里开始,只在乎抓捕小组从哪里开始。…{3}…
命令模式以3的间隔出现,即:
example_1 = "BNDABCDJML"
example_2 = "JKMJABCKME"
示例_1
将匹配,因为“ABC”
出现在位置3,但是示例_2
将不匹配,因为示例_2
出现在位置4
理想情况下,给定字符串:
text = "STCABCFFC"
这是匹配的,但是如果我只是得到匹配的开始,它会给我0
,因为这是匹配的开始索引,我想要的是3
我想这样做:
print match(regex, text).group(1).start()
但是,这当然不起作用,因为
start()
不是字符串的方法,而且字符串现在独立于text
。我不能简单地在捕获组中搜索子字符串的起始索引,因为这不能保证它遵循正则表达式模式(仅以3的间隔出现)。也许我忽略了什么,我没有用python写太多东西,所以如果这是一个微不足道的问题,请原谅。您可以从匹配对象-,中获取开始和结束索引:
你在正确的轨道上。以下是他们在文档中给出的示例:
>>> email = "tony@tiremove_thisger.net"
>>> m = re.search("remove_this", email)
>>> email[:m.start()] + email[m.end():]
'tony@tiger.net'
基本上,您应该执行match(regex,text).start(1)
,而不是match(regex,text).group(1)
>>> email = "tony@tiremove_thisger.net"
>>> m = re.search("remove_this", email)
>>> email[:m.start()] + email[m.end():]
'tony@tiger.net'