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

如何用Python re.sub()正则仅去除CSV指定行首尾空格/制表符

用Python re.sub()仅清理CSV指定行字段的首尾空白

需求说明

需要编写正则表达式,通过Python的re.sub()方法,仅去除CSV文件中用户指定行内各字段的首尾空格/制表符,其余行保持完全不变。

示例数据

原始CSV文本:

"Column1 "," Column2"," Column3 ","Column4","Column5"
"Record11 "," Record12"," Record13 ","Record14","Record15"
"Record21 "," Record22"," Record23 ","Record24","Record25"
"Record31 "," Record32"," Record33 ","Record34","Record35"

预期输出

仅目标行字段的首尾空白被清理,其余行保持原样:

"Column1","Column2","Column3","Column4","Column5"
"Record11 "," Record12"," Record13 ","Record14","Record15"
"Record21 "," Record22"," Record23 ","Record24","Record25"
"Record31 "," Record32"," Record33 ","Record34","Record35"

解决方案

你之前的正则会全局匹配所有行的字段,问题出在没有锁定目标行范围。下面是精准匹配指定行的实现:

代码实现

import re

csv_text = '''"Column1 "," Column2"," Column3 ","Column4","Column5"
"Record11 "," Record12"," Record13 ","Record14","Record15"
"Record21 "," Record22"," Record23 ","Record24","Record25"
"Record31 "," Record32"," Record33 ","Record34","Record35"
'''

# 设定要处理的目标行号(从1开始计数)
target_line = 1

# 构建正则:精准锁定目标行,匹配该行内带首尾空白的字段
pattern = re.compile(
    rf'(?<=^(?:.*\n){{{target_line-1}}})"\s*(.*?)\s*"(?=,|$)',
    flags=re.DOTALL | re.MULTILINE
)

# 执行替换
cleaned_csv = pattern.sub(r'"\1"', csv_text)

print(cleaned_csv)

正则逻辑拆解

  • (?<=^(?:.*\n){{{target_line-1}}}):正向后顾断言,用来定位目标行的起始位置。比如要处理第1行时,这个断言就是(?<=^)(匹配行首);处理第3行时,就是(?<=^.*\n.*\n)(跳过前两行)。
  • "\s*(.*?)\s*":匹配字段中被引号包裹、且首尾带有空格/制表符的内容,.*?是非贪婪匹配,避免跨字段匹配。
  • (?=,|$):正向前瞻断言,确保匹配的引号后面是字段分隔符(逗号)或行尾,防止误匹配。
  • re.DOTALL + re.MULTILINE:让.能匹配换行符,同时让^匹配每行的开头,保证行号定位准确。

灵活适配

如果需要处理其他行,比如第3行,只需要修改target_line = 3即可,正则会自动定位到目标行并清理字段空白,其他行不受影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 16:20:35