Pandas正则是否支持Perl中的分支重置运算符?
Pandas中实现Perl分支重置运算符的等效效果
方法1:使用Python 3.10+支持的分支重置运算符
Pandas的str.replace基于Python的re模块,Python 3.10及以上版本原生支持Perl风格的分支重置运算符(?|...)。这个运算符能让不同分支里的捕获组共享同一编号,正好满足你的需求。
修改后的正则表达式及代码如下:
d["x"].str.replace("(?|(abc)de|(99)\d+)","[\\1,7",regex=True)
这里(?|...)包裹两个分支后,第一个分支的(abc)和第二个分支的(99)都会被编号为组1,反向引用\1会自动指向匹配分支对应的捕获内容。
方法2:兼容低版本Python的回调函数方案
如果你的Python版本低于3.10,无法使用分支重置运算符,可以通过自定义回调函数实现相同逻辑:
import re def get_replacement(match_obj): # 提取第一个非空的捕获组内容 target = match_obj.group(1) or match_obj.group(2) return f"[{target},7" d["x"] = d["x"].str.replace("(abc)de|(99)\d+", get_replacement, regex=True)
回调函数会接收匹配对象,手动判断哪个捕获组有内容,再生成对应的替换字符串。
内容的提问来源于stack exchange,提问作者P.Jo
相关产品推荐
相关产品推荐

