为何Python正则re.search匹配仅返回POSIX而非TAR?
为什么
re.search()只匹配到POSIX而没返回TAR? 嘿,这个问题的核心原因其实是re.search()的工作逻辑——它只会在目标字符串中查找第一个匹配成功的结果,一旦找到就会停止后续的搜索,不会继续扫描字符串找其他符合正则模式的内容。
具体到你的代码:
- 目标字符串是
'POSIX TAR ARCHIVE (GNU)',POSIX出现在字符串的最开头位置 - 你的正则模式
'(TAR)|(POSIX)'是一个分支选择,POSIX是第一个能和字符串开头匹配上的分支
所以re.search()找到POSIX之后就直接返回这个匹配结果了,根本不会去检查后面的TAR。
如果想要获取所有符合模式的匹配项,你可以换成这两个方法:
- 使用
re.findall():它会返回所有匹配到的内容列表results = re.findall(pattern, string, re.IGNORECASE) # 结果会是 [('', 'POSIX'), ('TAR', '')],因为捕获组的存在;如果想要纯匹配文本,可以把正则改成'(?:TAR)|(?:POSIX)'或者直接'TAR|POSIX' - 使用
re.finditer():它会返回一个迭代器,包含所有匹配对象,你可以逐个提取信息matches = re.finditer(pattern, string, re.IGNORECASE) for match in matches: print(match.groups()) # 会依次输出 (None, 'POSIX') 和 ('TAR', None)
另外补充一下match.groups()的结果逻辑:你的正则有两个捕获组,第一个对应TAR,第二个对应POSIX。当匹配到POSIX时,第一个捕获组没有匹配成功,所以返回None,第二个捕获组匹配到内容,所以结果是(None, 'POSIX')。
内容的提问来源于stack exchange,提问作者gedalia
相关产品推荐
相关产品推荐

