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

Python正则表达式分割文本文件及CSV内容处理咨询

嘿,我来帮你搞定这个CSV处理的问题!先聊聊你问的正则分割方法,再给你推荐个更靠谱的方案——毕竟CSV里藏着不少坑,比如引号里的逗号,直接用正则搞不好就翻车~

一、用Python正则表达式分割CSV行

如果一定要用正则处理,核心是要区分引号内的内容(允许包含逗号)和不带引号的字段(不能有逗号)。这里给你写一个能处理大部分情况的正则和示例代码:

import re

# 匹配CSV字段的正则:要么捕获带引号的内容(支持转义引号\"),要么捕获不带引号的非逗号内容
csv_field_pattern = re.compile(r'(?:"([^"\\]*(?:\\.[^"\\]*)*)"|([^,]+))')

def split_csv_line(line):
    # 找到所有匹配的字段
    matches = csv_field_pattern.findall(line)
    # 提取每个匹配组里的有效内容,同时把转义的\"还原成"
    processed_fields = []
    for quoted, unquoted in matches:
        if quoted:
            processed_fields.append(quoted.replace('\\"', '"'))
        else:
            processed_fields.append(unquoted)
    return processed_fields

# 测试你的示例行
sample_line = '10476195,"Very nice, thanks. I\'ll do more extensive research on that. :-)"'
print(split_csv_line(sample_line))
# 输出结果: ['10476195', 'Very nice, thanks. I'll do more extensive research on that. :-)']

简单解释下这个正则的逻辑:

  • (?:"([^"\\]*(?:\\.[^"\\]*)*)":匹配被双引号包裹的内容,允许里面出现转义的引号(\"),并且捕获引号内的文本
  • |([^,]+):如果没有引号,就匹配连续的非逗号字符,作为一个字段
二、更稳妥的CSV处理方案:用Python内置的csv模块

说实话,正则处理CSV很容易踩边缘案例的坑——比如字段里有换行、多层转义、引号不配对之类的。Python自带的csv模块就是专门解决这些问题的,用它处理CSV才是生产环境里的首选,代码也更简洁:

import csv

# 方式1:用csv.reader按行读取,返回的每一行是一个列表
with open('your_comments.csv', 'r', encoding='utf-8') as csv_file:
    reader = csv.reader(csv_file)
    for row in reader:
        # row[0]是ID,row[1]是评论内容
        comment_id = row[0]
        comment_content = row[1]
        print(f"ID: {comment_id}, 评论: {comment_content}")

# 方式2:用csv.DictReader,按字段名访问(如果你的CSV有表头的话)
# 假设CSV第一行是"ID,Comment"这样的表头
with open('your_comments.csv', 'r', encoding='utf-8') as csv_file:
    reader = csv.DictReader(csv_file)
    for row in reader:
        comment_id = row['ID']
        comment_content = row['Comment']
        print(f"ID: {comment_id}, 评论: {comment_content}")

这个模块会自动帮你处理:

  • 引号内的逗号、换行
  • 转义的引号(比如""或者\")
  • 各种不符合规范但常见的CSV格式问题
三、处理评论内容截断的情况

你示例里有"I have some enc..."这种截断内容,如果是文件本身的内容截断,csv模块读取时如果遇到未闭合的引号,会抛出异常。你可以加个异常捕获来跳过有问题的行:

import csv

with open('your_comments.csv', 'r', encoding='utf-8') as csv_file:
    reader = csv.reader(csv_file)
    for line_num, row in enumerate(reader, start=1):
        try:
            comment_id = row[0]
            comment_content = row[1]
            print(f"第{line_num}行 - ID: {comment_id}, 评论: {comment_content}")
        except IndexError:
            print(f"警告:第{line_num}行格式无效,已跳过")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:23:28