我正在尝试解析readelf
输出:
import re
o = ' EXIDX 0x000590 0x002c0590 0x002c0590 0x00008 0x00008 R 0x4'
re.findall(r'^ \s+ (\w+) \s+ (?:(0x [\da-f]+ )\s+)+', o, re.VERBOSE) # (1)
# [('EXIDX', '0x00008')]
为什么只捕获一个十六进制数?我期望
re.findall(r'^ \s+ (\w+) \s+ (?:(0x [\da-f]+ )\s+)+', o, re.VERBOSE)
# [('EXIDX', '0x000590', '0x002c0590', '0x002c0590', '0x00008', '0x00008')]
当我尝试使用此 RE 时,它至少给出了仅匹配第一个数字的可理解结果:
re.findall(r'^ \s+ (\w+) \s+ (0x [\da-f]+ )\s+', oo, re.VERBOSE)
# [('EXIDX', '0x000590')]
我不明白为什么我只得到带有 RE (1) 的最后一个 (?) 数字