【问题标题】:Python - eliminate regex matches from csv filePython - 从 csv 文件中消除正则表达式匹配
【发布时间】:2018-03-09 17:26:05
【问题描述】:

我有一个文件,'in.csv',其中有许多条目,如下所示:

[Part 1: A]
Was hab’ ich nur getan?
Hab mich selbst nie hinterfragt
Wer bin ich, wer bin ich, wer bin ich, was bin ich bloß?
Aaaah - wer bin ich, was bin ich bloß?
Ging es all die Zeit lang wirklich nur um mich?
Nur um mich, nur um mich, nur um mich?
Denk’ ich wirklich immer nur an mich?
Nur an mich, nur an mich, nur an mich?

[Part 2: T]
Ich bin so horrible, horrible, horrible
Fehler einzusehen ist mir nicht possible, possible, possible
Jaaah - doch ich denk’ jeden Tag an all den Shit, den ich getan hab’
Warum unterschätz’ ich meinen Impact auf die andern?
Homie, sag mir, warum ficke ich mein Karma
Und geb kein’ Fick auf alles, was die Stimme in mir labert?
Blockiert mich da mein Ego oder weiß ich es nicht besser?
Mann, wann verdammt fühl ich mich bereit etwas zu ändern?
Warum lass’ ich einfach nichts mehr an mich ran?
Warum lass’ ich selbst mich selbst nicht an mich ran?
,1

(...)

我想找到并消除所有出现的这种模式:

match = "[\(\[].*?[\)\]]"

我正在尝试这个:

with open('in.csv', 'rb') as in_file, open('out.csv', 'wb') as out_file:
     reader = csv.reader(in_file, delimiter='\t')
     for item in list(reader):
         re.sub(match, ' ', item, flags=re.MULTILINE)      
         out_file.write(item)

但它不起作用。如何查找并消除所有[]

【问题讨论】:

  • 能否粘贴运行时看到的输出或错误?
  • 没有打印错误。但out_file 保持不变。
  • 将阅读器(可迭代)转换为列表的目的是什么?只是问问。
  • 因为in.csv 很大,我想尝试仅与第一项匹配的正则表达式

标签: python regex csv


【解决方案1】:

问题是你没有对结果做任何事情,表达式是正确的:

with open('in.csv', 'rb') as in_file, open('out.csv', 'wb') as out_file:
     reader = csv.reader(in_file, delimiter='\t')
     for item in list(reader):
         item = re.sub(match, ' ', item, flags=re.MULTILINE) 
         # ---^---     
         out_file.write(item)

sub 函数不会更改原始字符串,而是返回一个新副本,因此您需要抓住它。你甚至可以通过添加锚来改善你的表情:

^[\(\[].*?[\)\]]

它大大减少了所需的步骤(10 倍!),请参阅a demo on regex101.com

【讨论】:

    猜你喜欢
    • 2011-05-15
    • 2013-02-11
    • 2022-12-11
    • 2011-07-08
    • 2016-06-18
    • 1970-01-01
    • 2013-02-01
    • 2016-08-08
    • 1970-01-01
    相关资源
    最近更新 更多