You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Polars的str.replace_all正则替换路径列特定逗号为连字符?

问题分析与解决

你的正则写法问题在于:[a-z]\](,)\s会匹配数据块末尾的小写字母+],再加上后面的逗号和空格(比如Phone的最后一个字母e加上], ,整个片段是e], ),当你用-替换整个匹配内容时,就会把e], 直接换成-,导致原数据块变成[1, Phon-,自然达不到预期效果。

两种正确的解决方法

方法1:用反向预查精准定位分隔符

通过反向肯定预查,只匹配紧跟在]后面的, ,替换为-即可:

import polars as pl

# 构造示例数据
s = pl.Series('path', ['[1, Phone], [2, Tablet], [3, Tablet], [4, Phone], [5, Phone], [6, Phone]'])
df = pl.DataFrame(s)

# 执行替换
result_df = df.with_columns(pl.col('path').str.replace_all(r'(?<=]), ', '-'))

# 查看结果
print(result_df['path'][0])
# 输出:[1, Phone]-[2, Tablet]-[3, Tablet]-[4, Phone]-[5, Phone]-[6, Phone]
  • 正则说明:(?<=])是反向肯定预查,它会检查当前位置的前一个字符是],但不会把]纳入匹配内容,所以我们只替换目标分隔符, ,不会改动原数据块的内容。

方法2:直接匹配块间完整分隔符替换

更直观的方式是直接匹配两个数据块之间的], ,替换为]-:

result_df = df.with_columns(pl.col('path').str.replace_all(r'], ', '-'))
  • 逻辑说明:原数据块的分隔是], [xxx],把], 换成]-后,就变成]-[xxx],正好符合你要的[xxx]-[xxx]格式。

内容的提问来源于stack exchange,提问作者nam0_0

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 10:55:18