如何在Polars的replace_all方法中引用正则捕获组?
在Polars中使用正则捕获组进行替换
Polars 里可以通过字符串方法str.replace_all结合正则捕获组实现你要的效果,捕获组的引用语法和PostgreSQL类似,用\1对应第一个捕获组(多捕获组场景依次用\2、\3即可)。
示例代码
假设你有如下数据,需要把类似5m的格式替换为5 metres:
import polars as pl # 创建示例DataFrame df = pl.DataFrame({ "text_col": ["5m", "10m", "3km", "15m "] }) # 执行替换操作,引用捕获组 processed_df = df.with_columns( # 匹配数字+m的格式,捕获数字部分,替换为"数字 + metres" pl.col("text_col").str.replace_all(r"(\d+)m", r"\1 metres").alias("converted_text") ) print(processed_df)
运行结果
shape: (4, 2) ┌──────────┬────────────────┐ │ text_col ┆ converted_text │ │ --- ┆ --- │ │ str ┆ str │ ╞══════════╪════════════════╡ │ 5m ┆ 5 metres │ │ 10m ┆ 10 metres │ │ 3km ┆ 3km │ │ 15m ┆ 15 metres │ └──────────┴────────────────┘
注意事项
- 正则表达式要使用原始字符串(前缀
r),避免Python解析转义字符,确保\1能被Polars的正则引擎正确识别为捕获组引用。 - 如果需要匹配带空格的
m(比如你的PostgreSQL示例),只需把正则调整为r"(\d+)m ",替换字符串改为r"\1 metres "即可。
内容的提问来源于stack exchange,提问作者bkw1491
相关产品推荐
相关产品推荐

