Pandas的str.extract用正则提取仅返回首个匹配是方法还是正则问题?
问题原因
该现象由str.extract方法本身的设计特性导致,和正则表达式配置无关。
Pandas中str.extract的实现逻辑仅返回正则表达式第一个捕获组的首个匹配结果,不支持全局匹配。你在regex101开启全局模式后可以拿到全部匹配,是因为regex101的全局搜索逻辑独立于Pandas的方法实现,两者不互通。
解决建议
方案1:直接替换非小写字母字符(推荐,性能最高)
直接用str.replace将所有非小写字母的字符替换为空,一步得到目标结果:
leaseterm1['Termtext'] = leaseterm1['TermNew'].str.replace(r'[^a-z]', '', regex=True)
其中正则[^a-z]代表匹配所有不属于a-z小写字母的字符,全部替换为空后自然得到所有小写字母拼接的结果。
方案2:全局提取后拼接
如果需要走「提取所有字母序列再拼接」的逻辑,可以使用支持全局匹配的str.findall方法:
leaseterm1['Termtext'] = leaseterm1['TermNew'].str.findall(r'[a-z]+').str.join('')
str.findall会返回每个字符串中所有匹配的小写字母序列组成的列表,再通过str.join('')将列表内的元素拼接为完整字符串。
内容的提问来源于stack exchange,提问作者pekoz1
相关产品推荐
相关产品推荐

