0

我需要在某个短语之后比较两个不同文件的第一个元素。到目前为止,我有这个:

import re

data1 = ""
data2 = ""
first = re.match(r".*Ignore until after this:(?P<data1>.*)", firstlist[0])
second = re.match(r".*Ignore until after this:(?P<data2>.*)", secondarray[0])
data1 = first.group('data1')
data2 = second.group('data2')

if data1 == data2:
  #rest of the code...

我想在某个点之前忽略所有内容,然后将其余部分保存到变量中。我在脚本前面做了一些几乎与此相同的事情,它可以工作。但是,当我运行它时,我收到此错误:

File "myfile.py", line [whatever line it is], in <module>  
data1 = first.group('data1')  
AttributeError: 'NoneType' object has no attribute 'group'

为什么re.match第一和第二不能正常工作?

编辑

根据建议,我已更改[\s\S]*.*.

编辑2:这就是输入的样子(不像下面的评论):

Random text

More random text

Even more random text

Ignore until after this:

Meaningful text, keep this

...and everything else...

...until the end of the file here

基本上就是这样:在某个时间点之后需要保存的一串文本

4

2 回答 2

3

由于文件中的换行符,您可能只是遇到了问题。正如 Martijn Pieters 在对您的问题的评论中指出的那样,您可以使用标志 re.DOTALL 来捕获所有内容。所以有了这样的文件,(tmp在这个例子中命名)

Random text

More random text

Even more random text

Ignore until after this:

Meaningful text, keep this

...and everything else...

...until the end of the file here

你可以做这样的事情

with open('tmp') as f:
  first = re.match(r'.*Ignore until after this:(?P<data1>.*)', f.read(), re.DOTALL)
  print(first.group('data1'))

这使

Meaningful text, keep this

...and everything else...

...until the end of the file here
于 2013-09-23T20:52:21.273 回答
0

点“。” 正则表达式中的字符匹配除换行符以外的任何字符。因此,如果您将整个文件作为单个字符串,则正则表达式匹配到第一个新行,然后尝试将您的短语与下一行的开头匹配。当这失败时,它返回一个 NoneType。

看到这个这个

于 2013-09-23T20:30:58.800 回答