Pythonのreモジュールの正規表現の詳細な説明
re.match()関数
re.matchは、文字列の先頭からパターンに一致します。一致が失敗した場合、または最初にない場合は、Noneを返します。一致が成功すると、一致するオブジェクトが返され、一致するオブジェクト関数を使用して一致する式を取得できます。
re.match(pattern、string、flags = 0)
- パターン:正規表現のマッチング
- 文字列:照合する文字列
- flags:大文字と小文字を区別するかどうか、複数行の一致かどうかなど、正規表現の一致方法を制御するために使用されるフラグビット。
たとえばre.I
、文字列内の大文字と小文字は、照合時に無視されます。
import re
print(re.match('aa','Aaaabc',flags=re.I)) # 起始位置匹配
print(re.match('aa','bbaabc',flags=re.I)) # 不再起始位置匹配
# span()返回一个元组包含匹配开始和结束的位置
print(re.match('aa','Aaaabc',flags=re.I).span())
一致する式を取得するには、オブジェクト関数を使用group(num)
またはgroups()
一致させます。
- group(num = 0):入力されたグループ番号(複数のグループ番号)に従って、文字列(タプル)を返します。タプルには、グループ番号の対応する値が含まれます。デフォルトは0です。これは、一致するすべてのコンテンツが返されることを意味します。
- groups():1から含まれるグループ番号までのすべてのグループ文字列を含むタプルを返します。
line = "Cats are smarter than dogs"
matchObj = re.match(r'(.*) smarter (.*?) (.*)', line)
if matchObj:
print("matchObj.group() : ", matchObj.group())
print("matchObj.group(1) : ", matchObj.group(1))
print("matchObj.group(0, 1, 2, 3) : ", matchObj.group(0, 1, 2, 3))
print("matchObj.groups() : ", matchObj.groups())
else:
print("No match!!")
print(matchObj)
re.search()関数
re.search ()
文字列全体を照合し、最初に成功した一致を返します。
re.search(pattern、string、flags = 0)
print(re.search('aa','aaaabc').span()) # 在起始位置匹配
print(re.search('aa','bbaaac').span()) # 不在起始位置匹配
# NoneType对象没有span()
print(re.search('aa','bbaccc')) # 匹配失败
运行结果:
(0, 2)
(2, 4)
None
match
そして、search
異なり、よく理解match
マッチが失敗した場合、後者はもはや一致し、直接返される文字列の先頭にマッチするだけで、None
。search
開始位置に一致しない場合は、文字列全体での試合は、それは最初のマッチが成功するまで、文字列の一致の終わりではないが、それから戻ると、残りの文字列にマッチしていきますNone
。
re.sub()関数
re.sub()
この関数は、一致条件を満たす文字列内のすべてのコンテンツを置き換えることができます。
re.search(pattern、repl、string、count、flags = 0)
- repl:置き換えられた文字列。関数にすることができます。
- count:一致が成功した後の置換の最大数。デフォルトは0です。これは、すべての一致を置換することを意味します。
line = '女朋友是女神'
print(re.sub(r'(?<=是).*', '仙女', line))
运行结果:
女朋友是仙女
lambda
使用
line = 'A2B2C3'
print(re.sub(r'(\d+)', lambda x: str(int(x.group())*2), line))
运行结果:
A4B4C6
re.compile()関数
re.compile()
正規表現をコンパイルして正規表現(パターン)オブジェクトを生成するために使用されます。
re.compile(pattern [、flags])
- pattern:文字列形式の正規表現。
pattern = re.compile(r'\d+')
print(pattern.match('one12twothree34four'))
print(pattern.match('one12twothree34four', 3, 10))
运行结果:
None
(3, 5)
re.findall()関数
re.findall()は、文字列内の正規表現に一致するすべての部分文字列を検索してリストを返すために使用されます。一致するものが見つからない場合は、空のリストが返されます。
re.findall(string [、pos [、endpos]])
- string:照合する文字列。
- pos:オプションのパラメーター。文字列の開始位置を指定します。デフォルトは0です。
- endpos:オプションのパラメーター。文字列の終了位置を指定します。デフォルトは文字列の長さです。
pattern = re.compile(r'\d+')
print(pattern.findall('A1B2C3'))
print(pattern.findall('A1B2C3', 0, 4))
运行结果:
['1', '2', '3']
['1', '2']
re.finditer()関数
re.finditer()は、文字列内の正規表現に一致するすべての部分文字列を検索し、それらをイテレータとして返します。
re.finditer(pattern、string、flags = 0)
result = re.finditer(r"\d+", "A1B2C3")
for match in result:
print(match.group())
运行结果:
1
2
3
知識リファレンス: 新人チュートリアル