0

特定のフレーズのの 2 つの異なるファイルの最初の要素を比較する必要があります。これまでのところ、私はこれを持っています:

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.match1 番目と 2 番目で正しく動作しないのはなぜですか?

編集

提案に従って、私はに変更[\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 に答える