findall的奇怪行为

问题描述

import re
text1 = '"Python","PHP","Java",'
print(re.findall(r'P(.*?)n',text1))

预期输出:['Python']

实际输出:['ytho']

尽管正则表达式引擎与“ Python”匹配,但findall忽略输出中的“ P”和“ n”。有人可以告诉我这里到底发生了什么

解决方法

您需要一个非捕获组:

re.findall(r'P(?:.*?)n',text1)

请注意在左括号后加上?:。否则,re仅捕获与括号中的表达式匹配的字符串部分。