CSV 文件中的正则表达式搜索和替换值

Regular expression search and substitute values in CSV file

我想查找 CSV 文件中的所有管理职位并将其替换为编号 3。该列表包含不同的职位,从简单的“经理”到“施工项目经理和项目主管”,但所有它们放在两个逗号之间。我写这篇文章是为了找到它们:

[,\s]?([A-Za-z. '\s/()\"]+)?(Manager|manager)([A-Za-z. '\s/()]+)?,

问题是有时两个相邻的管理职位之间通常有一个逗号。所以当我想找到位置时我需要包含逗号,但当我想用 3 替换位置时我需要排除它!我如何使用 Python 中的正则表达式来做到这一点?

这里是 CSV file.

我建议改用 Python 的内置 CSV 模块。让我们不要在这里重新发明轮子,而是考虑将 CSV 处理为一个已解决的问题。

下面是一些示例代码,演示了如何完成:csv 模块负责 reading and writing 具有正确分隔符和引号字符的文件。 re.search 用于搜索个人 cells/columns 您的关键字。如果找到manager,则放一个3,否则,放上原来的内容,完成后写回该行。

import csv, sys, re

infile= r'in.csv'
outfile= r'out.csv'
o = open(outfile, 'w', newline='')
csvwri = csv.writer(o, delimiter=',', quotechar='\"', quoting=csv.QUOTE_MINIMAL)

with open(infile, newline='') as f:
    reader = csv.reader(f, delimiter=',', quotechar='\"', quoting=csv.QUOTE_MINIMAL)
    try:
        for row in reader:
            newrow = []
            for col in row:
                if re.search("manager", col, re.I):
                    newrow.append("3")
                else:
                    newrow.append(col)
            csvwri.writerow(newrow)
    except csv.Error as e:
        sys.exit('file {}, line {}: {}'.format(infile, reader.line_num, e))

o.flush()
o.close()

我会说,简单明了。

如果您坚持使用正则表达式,这里有一个改进的模式:

[,\s]?([A-Za-z. '\s/()\"]+)?(Manager|manager)([A-Za-z. '\s/()]+)?(?=,)

替换为3,如demo所示。

不过,我相信您还是可以使用 csv 库方法。