2017-02-23 7 views
0

py正規表現のバグが見つかったと思いますか、エラーが出ましたか?Python Regex Matchオブジェクトの属性バグ?

import regex 

... 

iters = regex.finditer("Teams? [^u]*? rejected",file) 
for Result in iters: 
    Beginning = Result.span()[0] 
    End = Result.span()[1] 
    Text = Result.match() 

上記のコードを実行すると、次のような結果が表示されます。 match属性を指定してregex.Matchオブジェクトを出力すると、そのオブジェクトに属性の一致がないというエラーが返されます。

<regex.Match object; span=(7684, 7708), match='Teams 1, 2 and 7 are rejected'> 
Traceback (most recent call last): 
File "b.py", line 72, in <module> 
Text = Result.match() 
AttributeError: '_regex.Match' object has no attribute 'match' 

私はこのコードをしばらく前に別のコンピュータに書き込みました。今私の新しいコンピュータでは、このエラーが発生します。正規表現の私の以前のバージョンが何であるか分からない、これは私の現在のバージョンです。

>>pip show regex 
Name: regex 
Version: 2017.2.8 
Summary: Alternative regular expression module, to replace re. 
Home-page: https://bitbucket.org/mrabarnett/mrab-regex 
Author: Matthew Barnett 
Author-email: [email protected] 
License: Python Software Foundation License 
+0

時間の99.9%、それが一般的なソフトウェアのバグか、エラーを起こしたのか疑問に思っているのなら、後者です。 – Barmar

+0

私は、コードは以前のバージョンで正常に動作するので、今はそうとは言いません。 – projectgonewrong

+0

標準のPython正規表現モジュールの名前は 'regex'ではなく' re'です。 – Barmar

答えて

3

regexreと互換性を持つようになっています。 finditerイテレータによって返されたMatchオブジェクトには、matchプロパティはありません。正規表現全体の一致を得る方法は、Result.group(0)または単にResult.group()です。

また、Result.span()[0]Result.span()[1]は、Result.start()Result.end()に簡略化することができます。

はそれが前に働いていた理由を私は知らないここ

re.Matchオブジェクトのドキュメントを参照してください。たぶん古いバージョンのregexモジュールが内部プロパティを公開していた可能性があり、これが修正されました。

関連する問題