Python:一行一行地阅读,找到正则表达式和组内工作

问题描述:

所以我有一个纯文本文件,我想用Python来找到所有的正则表达式,并与所有的结果列表。Python:一行一行地阅读,找到正则表达式和组内工作

这是我试图与交互式控制台:

>>> import re 
>>> result = [] 
>>> file = open('guion.fountain') 
>>> for line in file: 
...  m = re.search("\[\[Prop\]\]\*(.*)\*", line) 
...  result.append(m.group(1)) 
... 
Traceback (most recent call last): 
    File "<stdin>", line 3, in <module> 
AttributeError: 'NoneType' object has no attribute 'group' 

但我没有运气。它说m变量是NotType而不是正则表达式搜索的结果。

我在做什么错?

+0

在访问'.group(1)'前检查'if m:'。另外,你可能需要用'。*?'替换'。*'。如果预期的匹配跨越多行,请读取内存中的整个文件,然后使用're.DOTALL'修饰符。 –

+0

你能分享你的文件的内容或几行吗? –

+1

你有没有尝试过一个更简单的正则表达式,看看是否是这个问题? – klutt

试图逐行读取文件中的行,使用with,并打开阅读:

with open('guion.fountain', 'r') as file: 
     result = [] 
     for line in file: 
       m = re.search("\[\[Prop\]\]\*(.*)\*", line) 
       result.append(m.group(1)) 
.... 

如果re.search未能找到匹配,则返回None。因此,在访问m.group(1)之前,先检查if m:是个好主意。

另外,由于您的匹配跨越多行,您很可能需要将整个文件读入内存。只需在编译正则表达式时将.*替换为.*?并使用re.DOTALL修饰符,以便.可以匹配换行符号。