
Python获取正则匹配的位置
我想知道用Python的正则表达式模块如何定位匹配到的子字符串的起始和结束位置。
利用match和search对象的start()和end()方法
在Python中,使用re模块的match或search函数匹配字符串后,返回的是一个Match对象。可以调用该对象的start()方法获取匹配子串的起始索引,end()方法获取匹配子串的结束索引。例如:
import re
pattern = re.compile(r'abc')
match = pattern.search('123abc456')
if match:
print(match.start()) # 输出:3
print(match.end()) # 输出:6
如果字符串中有多个符合正则的匹配,怎样依次获取每个匹配项的位置?
用finditer获取所有Match对象并遍历位置
re模块的finditer函数会返回一个迭代器,包含所有匹配的Match对象。遍历这个迭代器,利用每个Match对象的start()和end()方法即可获得每个匹配项的位置。
示例:
import re
pattern = re.compile(r'\d+')
text = 'abc123def456'
for match in pattern.finditer(text):
print(match.group(), match.start(), match.end())
输出:
123 3 6
456 9 12
除了start和end之外,有没有方法能得到更详细的匹配位置,比如捕获组的位置?
使用span()方法提取匹配及组的位置范围
Match对象的span()方法返回一个二元组,表示匹配部分的(起始,结束)索引。对捕获组,也可以通过传入组号调用span(groupnum)获得该组对应的匹配区域。
示例:
import re
pattern = re.compile(r'(\w+)=(\d+)')
match = pattern.search('id=123')
if match:
print(match.span()) # 整个匹配区域
print(match.span(1)) # 第一个捕获组位置
print(match.span(2)) # 第二个捕获组位置