Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 获取正则表达式模式中捕获组的开始位置_Python_Regex - Fatal编程技术网

Python 获取正则表达式模式中捕获组的开始位置

Python 获取正则表达式模式中捕获组的开始位置,python,regex,Python,Regex,基本上,我想找到任何子字符串第一次出现的索引:“ABC”、“DEF”或“GHI”,只要它们以三个间隔出现。我为匹配此模式而编写的正则表达式是: regex = compile ("(?:[a-zA-Z]{3})*?(ABC|DEF|GHI)") *?确保我获得第一个匹配,因为它不是贪婪的。我使用的是一个捕获组,因为我假设这是实际获取(子字符串的)索引的唯一方法。我不在乎比赛从哪里开始,只在乎抓捕小组从哪里开始。…{3}…命令模式以3的间隔出现,即: example_1 = "BNDABCDJ

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

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'