Pandas按连续多星号拆分文本触发正则报错的问题
报错核心原因
- Pandas 字符串访问器
.str.split()默认将传入的分隔符作为正则表达式解析,而非普通字面文本。 - 星号
*是正则语法中的特殊元字符,作用是匹配「前一个元素的0次或多次重复」。当直接传入连续5个星号组成的字符串时,正则引擎从位置0开始解析,第一个星号找不到对应的前置匹配对象,就会触发nothing to repeat的解析错误。
可直接运行的修复方案
方案1:关闭正则匹配模式(推荐)
给.str.split()传入regex=False参数,强制Pandas将传入的分隔符作为普通字符串匹配,不需要处理正则转义,代码可读性最高,适配Pandas 1.4及以上版本:
review = review_raw["reviews"].str.split('*****', regex=False).str[0] print(review)
方案2:正则模式下转义特殊字符
如果使用的Pandas版本较低、不支持regex参数,或需要保留正则匹配逻辑,需要对作为特殊字符的星号做转义处理,每个星号前加反斜杠\,告知正则引擎这是普通的星号字符而非语法标记:
review = review_raw["reviews"].str.split('\*\*\*\*\*').str[0] print(review)
两种方案运行后,对示例输入"This place is not good ***** less salt on the popcorn!",都能正确提取到分隔符前的文本This place is not good,符合预期输出要求。
内容的提问来源于stack exchange,提问作者Brett La Pierre
相关产品推荐
相关产品推荐

