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

匹配末尾含单个双引号的CSV行并删除的正则表达式需求

嗨,这个问题我之前处理过类似的,给你几个实用的方案,根据你的需求和技术栈选就行:

方案一:用Awk快速过滤(适合字段内无逗号的场景)

如果你的CSV字段内容里没有逗号,只需要确保每个字段都被双引号包裹,那用Awk一行命令就能搞定:

awk '
BEGIN { FS = "," }
{
    valid = 1
    for (i = 1; i <= NF; i++) {
        # 检查每个字段是否严格以"开头并以"结尾
        if ($i !~ /^".*"$/) {
            valid = 0
            break
        }
    }
    if (valid) print
}
' your_input.csv > cleaned_output.csv

这个脚本会遍历每行的每个字段,只有当所有字段都符合"字段内容"格式时,才会保留该行。

方案二:用Python处理(支持字段内有逗号的复杂场景)

如果你的字段内容里可能包含逗号(比如"John, Doe","New York"这种合法行),Awk的简单分割会出错,这时候用Python的csv模块更可靠,它能正确解析带引号的字段:

import csv

input_path = "your_input.csv"
output_path = "cleaned_output.csv"

with open(input_path, "r", encoding="utf-8") as infile, \
     open(output_path, "w", encoding="utf-8", newline="") as outfile:
    
    # 配置writer,确保输出的行也保持每个字段用双引号包裹
    writer = csv.writer(outfile, quoting=csv.QUOTE_ALL)
    
    for line_num, line in enumerate(infile, 1):
        stripped_line = line.strip()
        if not stripped_line:
            continue  # 跳过空行
        
        try:
            # 用csv.reader解析当前行,自动处理引号和字段内的逗号
            reader = csv.reader([stripped_line], delimiter=",", quotechar='"')
            row = next(reader)
            
            # 额外验证:原行的引号结构必须合法
            if not (stripped_line.startswith('"') and stripped_line.endswith('"')):
                continue
            if stripped_line.count('"') % 2 != 0:
                continue
            
            # 验证通过,写入输出文件
            writer.writerow(row)
        except Exception as e:
            # 解析失败的行(比如引号不配对、格式混乱)直接跳过
            print(f"Skipping invalid line {line_num}: {stripped_line}")
            continue

这个脚本不仅能过滤掉格式错误的行,还能正确处理字段内包含逗号的合法行,同时保留原始的正确格式。

注意事项

  • 如果你的CSV存在转义引号(比如"He said \"Hello\""),需要在Python的csv.reader中启用escapechar='\\'参数。
  • 处理大文件时,Awk的性能会比Python好一些,但Python的灵活性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:53:16