Python正则表达式替换csv中的字符串

时间:2017-01-15 14:56:44

标签: python regex python-3.x csv

我有一个格式如下的csv文件:

   cat, mammal[1]
   shark, fish[2]
   dog, mammal[3]
   tiger, mammal[4]
   salmon, fish[5]

我想用方括号替换所有含有哺乳动物的行。

输出应如下:

cat, mam
shark, fish[2]
dog, mam
tiger, mam
salmon, fish[5]

到目前为止,我有一个读取/写入csv文件的代码:

import csv


with open('animals.csv', 'r') as fin, open("out.csv",'w') as fout:
        writer = csv.writer(fout)
        for row in csv.reader(fin):
            re.sub(???) #stuck at writing the regular expression
            writer.writerow(row)

2 个答案:

答案 0 :(得分:0)

您可以使用以下正则表达式进行替换:

for row in csv.reader(fin):
    row[1] = re.sub(r'(\s*mam)mal\[\d+\]', '\1', row[1])
    writer.writerow(row)

请参阅demonstration

答案 1 :(得分:0)

这里不需要正则表达式:

for row in csv.reader(fin):
    if row[1].startswith("mammal["):
       row[1] = "mam"

表现明智,这是最​​好的,因为

  • 没有正则表达式
  • 仅在匹配时替换字符串,否则保持不变

或者更快地使用生成器理解和writerows

with open('animals.csv', 'r') as fin, open("out.csv",'w') as fout:
    csv.writer(fout).writerows([row[0],"mam"] if row[1].starswith("mammal[") else row for row in csv.reader(fin))

注意:似乎第二列中有一个前导空格。在这种情况下,请在搜索/替换字符串前面添加一个空格。