[python]正規表現文字列の検索-match、search、findall、finditter


私はPythonの教材を投げて勉強します.この教材をもとに勉強したものを整理する.

正規表現シリーズ


1️⃣ 正規表現とは?文字クラス、Dot(.)、繰り返し(*)、繰り返し(+)、繰り返し({m,n},?)
2️⃣ 正規表現(2)-文字列検索(match、search、findall、finditter)
3️⃣ 正規表現(3)-matchオブジェクトのメソッド(group、start、end、span)
4️⃣ 正規表現(4)-COMPILEオプション-(DOTALL、IGNORECASE、MULTILINE、VERBOSE)
5️⃣ 正規表現(5)-スラッシュの問題("n")
6️⃣ 正規表現(6)メタ文字-|,^,$,A,Z,b,B
7️⃣ 正規表現(7)grooping、フロントナビゲーション、文字列置換、GreedyとNon-Greedy

reモジュール


Pythonは、正規表現をサポートするreモジュールを提供します.reモジュールはPythonのインストール時に自動的にインストールされる基本ライブラリです.
使いやすいです.
import re
p = re.compile('ab*')
re.compileを使用して正規表現をコンパイルします.re.compile結果を返すオブジェクトpを使用して、後続の操作を実行します.

正規表現を使用した文字列の検索


メソッド目的match()文字列の最初から正規式と一致するかどうかを調べ,()文字列全体を検索し,正規式と一致するかどうかを調べる.findall()正規表現に一致するすべての文字列(substring)がリストに返されます.finditter()正規表現と一致するすべての文字列(substring)を繰り返し可能なオブジェクトに返します.
match、searchは正規表現と一致したときにmatchオブジェクトを返し、一致しないときにNoneを返します.
私が図案を作ります.
import re
p =re.compile('[a-z]+')
この正規表現の意味は何ですか?小文字の1つ[a-z]、+は左側を少なくとも1回から無限回表す.
では「[a-z]+」とは、小文字で始まる無限大の文字列を意味します!

match


matchメソッドは、文字列が最初から正規表現と一致しているかどうかを確認します.以上のパターンに対してmatchメソッドを実行します.
m = p.match("python")
print(m)

<re.Match object; span=(0, 6), match='python'>
pythonは、正規表現に合致するため、matchオブジェクトを返します.
m = p.match("3 python")
print(m)

None
3 Pythonは正規表現に合わないためNoneを返します.
matchはmatchオブジェクトまたはNoneを返すため、Pythonの一般的なプログラムは次の手順で作成されます.
import re

p =re.compile(정규표현식)
m = p.match("조사할 문자열")
if m:
    print("Match found: ", m.group())
else:
    print("No match")
すなわち、matchの欠落値が存在する場合にのみ、次の操作を実行できます.

search


コンパイルされたパターンオブジェクトpを使用して検索します.
import re

p = re.compile('[a-z]+')
m = p.search("python")
print(m)

<re.Match object; span=(0, 6), match='python'>
「python」文字列の検索方法を実行する場合は、matchメソッドを実行する場合と同じです.
import re

p = re.compile('[a-z]+')
m = p.search("3 python")
print(m)

<re.Match object; span=(2, 8), match='python'>
「3 python」文字列の最初の文字は「3」ですが、searchは文字列の先頭から検索するのではなく、文字列全体を検索するので、「3」以降の「python」文字列と一致します.
したがって、matchメソッドとserachメソッドの使用は、文字列が最初から検索を開始するかどうかに依存する必要があります.

findall


今回はfindallメソッドを実行します.
import re

p = re.compile('[a-z]+')
result = p.findall("life is too short")
print(result)

['life', 'is', 'too', 'short']
「life is tow short」文字列の「life」、「is」、「do」、「short」をそれぞれ[a-z]+正規表現と組み合わせてリストに戻します.

finditer


今回のfinditterメソッドの実行
import re

p = re.compile('[a-z]+')
result = p.finditer("life is too short")
print(result)

<callable_iterator object at 0x00000188401D47F0>
<re.Match object; span=(0, 4), match='life'>
<re.Match object; span=(5, 7), match='is'>
<re.Match object; span=(8, 11), match='too'>
<re.Match object; span=(12, 17), match='short'>
finditterはfindallと同じで重複可能なオブジェクト(iterator object)を返します.重複可能なオブジェクトに含まれる各要素はmatchオブジェクトです.