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

时间:2018-06-20 15:27:00

标签: regex csv search substitution

我想在CSV文件中查找并替换所有编号为3的管理职位。该列表包含从简单的“,Manager”到“,Construction Project Manager and Project Superintendent”的不同职位,但是所有这些都是放在两个逗号之间。我写这篇文章是为了找到所有的人:

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

问题在于,两个相邻的Managrial位置之间有时会出现逗号。因此,当我想查找职位时需要添加逗号,但是当我想用3替换职位时就需要排除逗号!我该如何在Python中使用正则表达式呢?

这里是CSV file

1 个答案:

答案 0 :(得分:1)

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

以下是一些示例代码,演示了如何实现:csv模块使用正确的定界符和引号char负责reading and writing文件。 re.search用于在单个单元格/列中搜索您的关键字。如果找到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 lib方法仍然会更好。