Python正则表达式获得组位

时间:2016-03-28 03:11:10

标签: python regex

这是我的代码:

a = '/afolder_l/location/folder_l/file.jpg'
p= re.compile("/.+/location/.+_([lr])/")
m = p.match(a)

现在, print m.group(1)给l,但我也希望得到该组的位置。 现在,m.span()给出一个包含所有文本的位置的元组。我怎么能得到l的位置?或者' r'既然那是我想要分组的呢?

2 个答案:

答案 0 :(得分:5)

您需要引用组号

>>> import re
>>>
>>> a = '/afolder_l/location/folder_l/file.jpg'
>>> p= re.compile("/.+/location/.+_([lr])/")
>>> m = p.match(a)
>>> m.span()
(0, 29)
>>> m.span(1)
(27, 28)

答案 1 :(得分:1)

您可以将 SRE_Match对象 .span() 方法与整数参数作为组号一起使用

一些示例可以使您更加清楚。如果使用3组 () ,则组 0 将是完全匹配的,并带有参数输入因为从1到3的整数将与每个组号的匹配和索引,它们分别是 .group() .span() 方法。希望这会有所帮助!

>>> import re
>>> regex = re.compile(r"(\d{4})\/(\d{2})\/(\d{2})")
>>> text = "2019/12/31"
>>> matched = regex.match(text)
>>> matched
<_sre.SRE_Match object; span=(0, 10), match='2019/12/31'>

>>> matched.groups()
('2019', '12', '31')
>>> matched.span()
(0, 10)

>>> matched.group(0)
'2019/12/31'
>>> matched.span(0)
(0, 10)

>>> matched.group(1)
'2019'
>>> matched.span(1)
(0, 4)

>>> matched.group(2)
'12'
>>> matched.span(2)
(5, 7)

>>> matched.group(3)
'31'
>>> matched.span(3)
(8, 10)