re間で異なる動作。を検索して再…Findall

私はPython2の正規表現操作からこの例を取得します。*ドキュメントとその例は、ここでいくつかの変更を加えて詳細に説明しています。 全体の例を説明するために、文字列型の変数呼び出しを取得しましょう,

text = "He was carefully disguised but captured quickly by police."

とコンパイル型の正規表現パターンとして,

regEX = r"\w+ly"pattern = re.compile(regEX)

\w meanは任意の単語文字(英数字&アンダースコア)に一致し、+meanは先行するトークンの1つ以上に一致し、全体の意味はlyで終わる任意の単語を選択します。 上記の正規表現を満たす2つの単語(”慎重に”と”迅速に”)しかありません。

reに移行する前に。findall()またはre。finditer()、reが何をするか見てみましょう。search()はPython2で意味します。*ドキュメント。

文字列をスキャンして、正規表現パターンが一致を生成する最初の場所を探し、対応するMatchObjectインスタンスを返します。 これは、文字列内のある時点で長さゼロの一致を見つけることとは異なることに注意してください。

以下のコード行は、reの基本的な理解を提供します。検索()。

search = pattern.search(text)print(search)print(type(search))#output<re.Match object; span=(7, 16), match='carefully'><class 're.Match'>

reを生成します。Python2でサポートされている13のメソッドと属性を持つクラス型objectのMatchObject。*ドキュメント。 このspan()メソッドは、text変数内の一致した単語の開始点と終了点(上記の例では7と16が存在します)で構成されます。 再…search()メソッドは最初の一致のみを考慮し、それ以外の場合はNoneを返します。

のは、質問に移動してみましょう、その前に何がreを参照してください。Finditer()はPython2で意味します。*ドキュメント。

string内のREパターンの重複しないすべての一致に対してMatchObjectインスタンスを生成するイテレータを返します。 文字列は左から右にスキャンされ、一致するものが見つかった順序で返されます。 空の一致が結果に含まれます。

次のコード行に来ると、reの基本的な理解が得られます。finditer()。

finditer = pattern.finditer(text)print(finditer)print(type(finditer))#output<callable_iterator object at 0x040BB690><class 'callable_iterator'>

上記の例は、ループである必要があるIteratorオブジェクトを示しています。 これは明らかに私たちが望む結果ではありません。 finditerをループして、このIteratorオブジェクトの内部にあるものを見てみましょう。

for anObject in finditer: print(anObject) print(type(anObject)) print()#output<re.Match object; span=(7, 16), match='carefully'><class 're.Match'><re.Match object; span=(40, 47), match='quickly'><class 're.Match'>

この結果はreと非常によく似ています。以前に取得したsearch()結果。 しかし、上記の出力<re.Match object; span=(40, 47), match='quickly'>で新しい結果を見ることができます。 私がPython2で以前に言及したように。*ドキュメント,再.search()は、正規表現パターンが一致してreを生成する最初の場所を探して文字列をスキャンします。finditer()は、正規表現パターンが一致するすべての場所を探して文字列をスキャンし、reよりも詳細を返します。findall()メソッド。

ここで何がre.Findall()はPython2で意味します。*ドキュメント。

string内のpatternの重複しないすべての一致を文字列のリストとして返します。 文字列は左から右にスキャンされ、一致するものが見つかった順序で返されます。 パターンに複数のグループがある場合、これはタプルのリストになります。 空の一致が結果に含まれます。

reで何が起こるかを理解しましょう。findall()。

findall = pattern.findall(text)print(findall)print(type(findall))#output<class 'list'>

この出力は、text変数内の一致した単語のみを提供します。 出力内のリストは、reのmatch属性に似ています。マッチオブジェクト。ここに完全なコードがあり、私はPython3.7で試しました。

import retext = "He was carefully disguised but captured quickly by police."regEX = r"\w+ly"pattern = re.compile(regEX)search = pattern.search(text)print(search)print(type(search))print()findall = pattern.findall(text)print(findall)print(type(findall))print()finditer = pattern.finditer(text)print(finditer)print(type(finditer))print()for anObject in finditer: print(anObject) print(type(anObject)) print()