Python 属性错误:';非类型';对象没有属性';集团';使用re.match时

Python 属性错误:';非类型';对象没有属性';集团';使用re.match时,python,regex,Python,Regex,我需要在某个短语之后比较两个不同文件的第一个元素。到目前为止,我有: 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.gro

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

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...

基本上就是这样:正则表达式中的字符与除换行符以外的任何字符都匹配,需要从某个点后保存的文本字符串。因此,如果将整个文件作为单个字符串,则正则表达式将匹配到第一行新行,然后尝试将短语与下一行的开头匹配。如果失败,它将返回一个NoneType


请参见和。

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


请参阅和。

由于文件中的换行符,您可能遇到了问题。正如Martijn Pieters在对您的问题的评论中指出的,您可以使用标记re.DOTALL来捕获所有内容。因此,对于这样一个文件(在本例中名为
tmp

你可以这样做

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

您可能只是因为文件中的换行而遇到问题。正如Martijn Pieters在对您的问题的评论中指出的,您可以使用标记re.DOTALL来捕获所有内容。因此,对于这样一个文件(在本例中名为
tmp

你可以这样做

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

为什么要使用
[\s\s]*
?由于
\S
\S
相反,您不妨使用
*
并将其处理完毕(使用
re.DOTALL
)。我也用这种方法尝试过,但得到了相同的错误,这些\S\S只是在抓救命稻草,试图改变任何可能导致问题的东西,只是忘了把它调回我们需要看看输入样本。顺便说一句,您不需要“声明”
data1
data2
,这对于我们重现您的问题来说是不够的,更不用说帮助您了。很抱歉,我的计算机太笨了,不允许我用正确的格式编辑注释,我将在问题中添加输入示例,您为什么使用
[\s\s]*
?由于
\S
\S
相反,您不妨使用
*
并将其处理完毕(使用
re.DOTALL
)。我也用这种方法尝试过,但得到了相同的错误,这些\S\S只是在抓救命稻草,试图改变任何可能导致问题的东西,只是忘了把它调回我们需要看看输入样本。你不需要“声明”
data1
data2
,顺便说一句。这些信息不足以让我们重现你的问题,更不用说帮助你了。很抱歉,我的电脑太笨了,不允许我用正确的格式编辑评论,我要在问题中添加输入示例谢谢,问题是它不会是第一条新线。我最初使用[\s\s]*而不是。*来匹配所有内容,包括换行符,但我遇到了相同的问题。谢谢,问题是它不会是第一条换行符。我最初使用[\s\s]*而不是。*来匹配包括换行符在内的所有内容,但我遇到了相同的问题。谢谢,我最终以一种不使用正则表达式的方式解决了这个问题,这种方式非常适合我的项目布局(因此可能不会有助于其他人发布)但我将此标记为答案,因为这本来就是我遇到的问题:)谢谢,我实际上最终以一种不带regex的方式解决了这个问题,这种方式与我的项目的布局非常特定(因此可能对其他人的发布没有帮助)但我将此标记为答案,因为这本来就是我遇到的问题:)
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