如何拆分Python字符串列并保留+/-分隔符?
问题描述
我不太擅长正则表达式,正在学习提升。我需要拆分包含如下格式值的字符串列:
1000+10% 300-7%
我当前使用的代码为:
pattern = r'[+|-]' df[postsplitcol] = df[col].str.split(pattern)
但拆分后+或-符号会被移除,请问如何让拆分后的右侧字符串保留这些符号?我已查阅论坛相关问题,但未找到适配该拆分场景的高效方法。
解决方案
你可以使用正向前瞻断言实现拆分时保留符号,正向前瞻只会匹配符号前的位置,不会消耗符号本身,拆分后符号会自然留在右侧字符串里。
修改后的代码如下:
pattern = r'(?=[+-])' # 正向前瞻,匹配+或-之前的位置 df[postsplitcol] = df[col].str.split(pattern)
效果验证
- 输入
1000+10%,拆分结果为['1000', '+10%'] - 输入
300-7%,拆分结果为['300', '-7%']
原问题原因
你之前用的r'[+|-]'是直接匹配+或-字符,str.split()默认会把匹配到的分隔符从结果中移除,所以符号丢失。而正向前瞻是零宽断言,它只匹配一个位置,不会作为分隔符被移除,因此符号能保留在拆分后的右侧部分。
如果需要把拆分结果分到不同列,可直接展开:
df[['num', 'adjustment']] = df[col].str.split(pattern, expand=True)
内容的提问来源于stack exchange,提问作者asimo
相关产品推荐
相关产品推荐

