re【正規表現】3.1 / 3.3 / 3.4 / 3.6~3.8 / 3.113.12
メモ ( 概要 モジュール・オブジェクト 基本操作 ) 検索フラグ 正規表現パターン 属性一覧 メソッド一覧 検索 全検索 全検索 (イテレータ) 分割 置換 キャプチャ参照 マッチ位置インデックス
メモ
概要
- re【正規表現】で 検索フラグ・正規表現パターンを使用し、 検索・置換・分割が可能
- 正規表現パターンは、通常 raw 文字列記法 を使用 ( '\\w\\\\' → r'\w\\' )
(str【文字列型】の プレフィックス 参照) - 正規表現パターン・検索元文字列は、文字列 (str)・バイト文字列 (bytes)
- match-case【match文】3.10 の match はソフトキーワードの為、 変数等として使用可能
モジュール・オブジェクト
- 同一の正規表現パターンで複数回処理する場合、Pattern【正規表現オブジェクト】を使用
但し、数回の使用であれば、re【正規表現モジュールコンテンツ】のキャッシュで十分 - Match【マッチオブジェクト】で検索結果を処理
(簡単な例は、search【検索】 参照)モジュールコンテンツ・オブジェクト 備考 re【正規表現モジュールコンテンツ】 Pattern【正規表現オブジェクト】 re.compile【コンパイル】で返却
アトミックとみなし、copy.copy()・copy.deepcopy() でコピー可 3.7Match【マッチオブジェクト】 下記で返却
fullmatch【検索 (全体一致)】
match【検索 (先頭一致)】
search【検索】
finditer【全検索 (イテレータ)】
アトミックとみなし、copy.copy()・copy.deepcopy() でコピー可 3.7 - 詳細は、属性・メソッド 参照
基本操作
- 検索
処理 Match 使用 リスト【list】使用 参考:re【正規表現】未使用 1件検索 search【検索】 str【文字列型】の
find【順方向検索 (例外なし)】等複数件検索 finditer【全検索 (イテレータ)】
(繰り返し)findall【全検索】 検索結果 戻り値の Match から検索結果取得
(属性・メソッド 参照)戻り値の リスト【list】を参照 - 置換
処理 参考:re【正規表現】未使用 sub【置換】
subn【置換・置換個数取得】str【文字列型】の
replace【置換】 - 分割
処理 参考:re【正規表現】未使用 split【分割】 str【文字列型】の
split【順方向分割】等
関連
外部リンク
検索フラグ 3.6 / 3.11
正規表現パターン 3.3 / 3.6~3.8 / 3.11
検索フラグ | 備考 |
---|---|
re.A re.ASCII | ASCII 文字限定 |
re.DEBUG | デバッグ情報表示 |
re.I re.IGNORECASE | 大小文字の区別なし |
re.L re.LOCALE | 大小文字の区別なし (ロケール) ( バイト文字列 (bytes)のみ可 3.6 ) |
re.M re.MULTILINE | 複数行検索 ( ^【先頭】・$【末尾】を各行に対応 ) |
re.NOFLAG 3.11 (デフォルト) | 検索フラグなし (値:0) |
re.S re.DOTALL | 改行検索 ( .【改行以外の文字】を改行も対応 ) |
re.U re.UNICODE | Unicode 対応 (後方互換の為、冗長) |
re.X re.VERBOSE | コメント対応 |
※フラグ定数はenum.IntFlagのサブクラスのRegexFlagのインスタンス 3.6
正規表現パターン | 備考 |
---|---|
. | 改行以外の文字 ( DOTALL【改行検索】指定:改行を含む ) |
^ | 先頭 ( MULTILINE【複数行検索】指定:各行の先頭を含む ) |
$ | 末尾 ( MULTILINE【複数行検索】指定:各行の末尾を含む ) |
パターン* | パターンの 0 回以上の繰り返し ( 最長一致 ) |
パターン*? | パターンの 0 回以上の繰り返し ( 最短一致 ) |
パターン*+ 3.11 | パターンの 0 回以上の繰り返し ( 絶対最大量指定子:バックトラックなし ) |
パターン+ | パターンの 1 回以上の繰り返し ( 最長一致 ) |
パターン+? | パターンの 1 回以上の繰り返し ( 最短一致 ) |
パターン++ 3.11 | パターンの 1 回以上の繰り返し ( 絶対最大量指定子:バックトラックなし ) |
パターン? | パターンの 0 回か 1 回 ( 最長一致 ) |
パターン?? | パターンの 0 回か 1 回 ( 最短一致 ) |
パターン?+ 3.11 | パターンの 0 回か 1 回 ( 絶対最大量指定子:バックトラックなし ) |
パターン{m} | パターンの m 回の繰り返し ( m:正数 ) |
パターン{m,n} | パターンの m 回 ~ n 回の繰り返し ( 最長一致 ) ( m・n:正数 / m または n は省略可能 ) |
パターン{m,n}? | パターンの m 回 ~ n 回の繰り返し ( 最短一致 ) ( m・n:正数 / m または n は省略可能 ) |
パターン{m,n}+ 3.11 | パターンの m 回 ~ n 回の繰り返し ( 絶対最大量指定子:バックトラックなし ) ( m・n:正数 / m または n は省略可能 ) |
[文字の集合] | 集合:文字の集合 内の文字 ( - で範囲指定 ) ※将来的に別の意味を持つ文字セットを含む場合は FutureWarning 警告3.7 |
[^文字の集合] | 補集合:文字の集合 内の文字以外 (上記集合の逆 / 詳細については集合参照) |
パターンA|パターンB | パターンを区切り、どちらかのパターンと一致 |
(パターン) | キャプチャ (後方参照:\キャプチャ番号) |
(?:パターン) | キャプチャ (後方参照不可) |
(?P<キャプチャ名> パターン) | 名前付きキャプチャ ( 後方参照:(?P=キャプチャ名) ・\キャプチャ番号 ) ※バイトパターンに非 ASCII 文字を含むキャプチャ名の使用不可 (b'\x00'~b'\x7f'のみ有効) 3.12 |
(?P=キャプチャ名) | 名前付きキャプチャの後方参照 ( 名前付きキャプチャ: (?P<キャプチャ名>パターン) ) |
(?(キャプチャ番号 / キャプチャ名) 存在ありパターン |存在なしパターン) | キャプチャ存在判定 存在なしパターン は省略可 ( 対になった括弧のチェック等に有用 ) ※ASCII 数字以外を含むキャプチャ番号の使用不可 3.12 ※バイトパターンに非 ASCII 文字を含むキャプチャ名の使用不可 (b'\x00'~b'\x7f'のみ有効) 3.12 |
(?#コメント) | コメント |
パターン(?=パターン (後)) | 肯定先読み:パターン に パターン (後) が続く |
パターン(?!パターン (後)) | 否定先読み:パターン に パターン (後) が続かない |
(?<=パターン (前))パターン | 肯定後読み:パターン (前) に パターン が続く ※パターン (前)は固定長のみサポート3.5 |
(?<!パターン (前))パターン | 否定後読み:パターン (前) でない後に パターン が続く |
(?>パターン (前))パターン 3.11 | アトミックグループ:パターン (前) に パターン が続く ( バックトラックなし ) |
(?aiLmsux) | 検索フラグ指定 ( 全体 ) 式の先頭のみ使用可 3.11 aiLmsux の1個以上を指定 (以下に対応) ・re.A【ASCII 文字限定】 ・re.I【大小文字の区別なし】 ・re.L【大小文字の区別なし (ロケール)】 ・re.M【複数行検索】 ・re.S【改行検索】 ・re.U【Unicode 対応 (後方互換)】 ・re.X【コメント対応】 |
(?aiLmsux-imsx: パターン) 3.6 | 検索フラグ設定・解除 ( 個別 ) 設定する aiLmsux の0個以上 - 解除する imsx の1個以上を指定 (省略可) 対応フラグ:(?aiLmsux) 参照 ( aLu 追加 3.7 ) |
\~ | エスケープシーケンス (以下参照) 未定義の ASCII 文字指定はエラー 3.6 |
\ooo | 8進数定義 (先頭が0 または 3桁) |
\キャプチャ番号 (1~99) | キャプチャの後方参照 |
\\ | バックスラッシュ |
\a | ビープ音 (\u0007) |
\A | 文字列の先頭 |
\b | 単語の区切り ( アンダースコア(_) を含む ) ( ASCII フラグ指定:ASCII 限定 ) |
\B | 単語の区切り以外 ( アンダースコア(_) を含まない ) ( ASCII フラグ指定:ASCII 限定 ) |
\d | 文字列 (str):10進数 ( ASCII フラグ指定:ASCII 限定 / [0-9] と等価 ) バイト文字列 (bytes):10 進数 ( [0-9] と等価 ) |
\D | 非 10 進数 (\d の逆) ( ASCII フラグ指定:ASCII 限定 / [^0-9] と等価 ) |
\f | 改ページ (\u000C) |
\n | 改行 (\u000A) |
\N{Unicode 文字名} 3.8 | Unicode 文字 (例:\N{COPYRIGHT SIGN} ) |
\r | 復帰 (\u000D) |
\s | 文字列 (str):空白文字 ( ASCII フラグ指定:ASCII 限定 / [ \t\n\r\f\v] と等価 ) バイト文字列 (bytes):空白文字 ( [ \t\n\r\f\v] と等価 ) |
\S | 空白文字以外 (\s の逆) ( ASCII フラグ指定:ASCII 限定 / [^ \t\n\r\f\v] と等価 ) |
\t | タブ (\u0009) |
\uhhhh 3.3 | 16進数定義 (16 bit) バイト文字列 (bytes):エラー |
\Uhhhhhhhh 3.3 | 16進数定義 (32 bit) バイト文字列 (bytes):エラー |
\v | 垂直タブ (\u000B) |
\w | 文字列 (str):単語文字 ( 文字・数字・アンダースコア(_) ) ( ASCII フラグ指定:ASCII 限定 / [a-zA-Z0-9_] と等価 ) バイト文字列 (bytes):[a-zA-Z0-9_] と等価 |
\W | 単語文字以外 ( \w の逆 ) |
\xhh | 16進数定義 (8 bit) |
\Z | 文字列の末尾 |
パターン:検索位置移動
パターン:検索位置移動なし
属性 3.6
メソッド
例外クラス 3.5
属性 | 備考 |
---|---|
Pattern | |
Pattern.flags | 検索フラグ |
Pattern.groups | キャプチャ数 |
Pattern.groupindex | キャプチャ名辞書 (キャプチャ名・キャプチャ番号) |
Pattern.pattern | 正規表現パターン |
Match | |
Match[ g ] 3.6 | キャプチャ参照 g:キャプチャ番号 または キャプチャ名 キャプチャ番号 (0):マッチ文字列全体 キャプチャ番号 (1~):対応するキャプチャ値 キャプチャ名:対応するキャプチャ値 (参照:__getitem__【キャプチャ参照 (添字参照)】3.6) |
Match.endpos | 検索最終位置インデックス |
Match.lastindex | 最終キャプチャ番号 |
Match.lastgroup | 最終キャプチャ名 不一致 または キャプチャ名が未指定:None |
Match.pos | 検索開始位置インデックス |
Match.re | 正規表現オブジェクト |
Match.string | 検索元文字列 |
メソッド | re | Pattern | Match | 戻り値 |
---|---|---|---|---|
__getitem__【キャプチャ参照 (添字参照)】3.6 | ● | マッチ文字列 (参照:キャプチャ参照 属性) | ||
compile【コンパイル】 | ● | Pattern【正規表現オブジェクト】 | ||
end【マッチ位置インデックス (末尾)】 | ● | 末尾のマッチ位置インデックス | ||
escape【特殊文字エスケープ】3.3 / 3.7 | ● | エスケープ後の文字列 | ||
expand【キャプチャ参照展開】3.5 | ● | 展開後の文字列 | ||
findall【全検索】3.7 | ● | ● | 検索結果リスト【list】 | |
finditer【全検索 (イテレータ)】3.7 | ● | ● | イテレータ (Match【マッチオブジェクト】) | |
fullmatch【検索 (全体一致)】3.4 | ● | ● | Match【マッチオブジェクト】 | |
group【キャプチャ参照】 | ● | 引数0個:マッチ文字列全体 引数1個:マッチ文字列 引数2個以上:マッチ文字列のタプル | ||
groupdict【キャプチャ参照 (辞書)】 | ● | 辞書 (キャプチャ名・キャプチャ値) | ||
groups【キャプチャ参照 (タプル)】 | ● | タプル (キャプチャ値) | ||
match【検索 (先頭一致)】 | ● | ● | Match【マッチオブジェクト】 | |
purge【正規表現キャッシュ クリア】 | ● | なし | ||
search【検索】 | ● | ● | Match【マッチオブジェクト】 | |
span【マッチ位置インデックス】 | ● | マッチ位置インデックス (タプル:先頭・末尾) | ||
split【分割】3.1 / 3.5 / 3.7 | ● | ● | 分割リスト【list】 | |
start【マッチ位置インデックス (先頭)】 | ● | 先頭のマッチ位置インデックス | ||
sub【置換】3.1 / 3.5~3.7 / 3.113.12 | ● | ● | 置換後の文字列 | |
subn【置換・置換個数取得】3.1 / 3.5~3.7 / 3.113.12 | ● | ● | タプル (置換後の文字列・置換個数) |
例外クラス | 属性 3.5 | 備考 |
---|---|---|
re.error(msg, pattern=None, pos=None) | msg | エラーメッセージ |
pattern | 正規表現パターン | |
pos | エラー発生位置インデックス | |
lineno | pos に対応する行 | |
colno | pos に対応する列 |
compile【コンパイル】
メモ
- コンパイル
- 同一の正規表現パターンで複数回処理する場合、 コンパイルしてPattern【正規表現オブジェクト】を使用
但し、数回の使用であれば、re【正規表現モジュールコンテンツ】のキャッシュで十分
- 同一の正規表現パターンで複数回処理する場合、 コンパイルしてPattern【正規表現オブジェクト】を使用
- 外部リンク
構文
re.compile(pattern, flags=0)
Pattern【正規表現オブジェクト】
pattern正規表現パターン
flags検索フラグ
例外re.error
例
import re
s1 = 'The quick brown fox jumps over the lazy dog.'
s2 = 'THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG.'
pattern = re.compile(r'(\w+) (\w+)')
matched = pattern.search(s1)
print(matched)
# 出力:<re.Match object; span=(0, 9), match='The quick'>
print(matched.lastindex, matched[0], matched[1], matched[2], sep='/')
# 出力:2/The quick/The/quick
matched = pattern.search(s2)
print(matched)
# 出力:<re.Match object; span=(0, 9), match='THE QUICK'>
print(matched.lastindex, matched[0], matched[1], matched[2], sep='/')
# 出力:2/THE QUICK/THE/QUICK
search【検索】
match【検索 (先頭一致)】
fullmatch【検索 (全体一致)】3.4
メモ
- 正規表現パターンで検索
- 任意の部分が一致する検索:search【検索】
- 先頭が一致する検索:match【検索 (先頭一致)】
- 全体が一致する検索:fullmatch【検索 (全体一致)】
- 外部リンク
構文
re.search(pattern, string, flags=0)
re.match(pattern, string, flags=0)
re.fullmatch(pattern, string, flags=0) 3.4
Pattern.search(string[, pos[, endpos]])
Pattern.match(string[, pos[, endpos]])
Pattern.fullmatch(string[, pos[, endpos]]) 3.4
Match【マッチオブジェクト】 (一致無し:None)
pattern正規表現パターン
string検索元文字列
flags検索フラグ
pos検索開始位置インデックス (省略:0)
endpos検索終了位置インデックス
例外re.error
例
import re
s = 'The quick brown fox jumps over the lazy dog.'
matched = re.search(r'\w*x\w*', s)
print(matched)
# 出力:<re.Match object; span=(16, 19), match='fox'>
print(matched[0])
# 出力:fox
matched = re.search(r'\w*y\w*', s)
print(matched)
# 出力:<re.Match object; span=(35, 39), match='lazy'>
print(matched[0])
# 出力:lazy
matched = re.search(r'\w*z\w*', s)
print(matched)
# 出力:<re.Match object; span=(35, 39), match='lazy'>
print(matched[0])
# 出力:lazy
matched = re.search(r'\w*@\w*', s)
print(matched)
# 出力:None
pattern = re.compile(r'\w+')
matched = pattern.search(s)
print(matched)
# 出力:<re.Match object; span=(0, 3), match='The'>
print(matched[0])
# 出力:The
matched = pattern.search(s, matched.end())
print(matched)
# 出力:<re.Match object; span=(4, 9), match='quick'>
print(matched[0])
# 出力:quick
matched = pattern.search(s, matched.end())
print(matched)
# 出力:<re.Match object; span=(10, 15), match='brown'>
print(matched[0])
# 出力:brown
import re
s = 'The quick brown fox jumps over the lazy dog.'
p1 = r'\w*h\w*'
p2 = r'\w*x\w*'
matched = re.match(p1, s)
print(matched)
# 出力:<re.Match object; span=(0, 3), match='The'>
print(matched[0])
# 出力:The
matched = re.match(p2, s)
print(matched)
# 出力:None
pattern = re.compile(p1)
matched = pattern.match(s)
print(matched)
# 出力:<re.Match object; span=(0, 3), match='The'>
print(matched[0])
# 出力:The
pattern = re.compile(p2)
matched = pattern.match(s)
print(matched)
# 出力:None
import re
s = 'abc_xyz'
p1 = r'a\w*z'
p2 = r'z\w*a'
matched = re.fullmatch(p1, s)
print(matched)
# 出力:<re.Match object; span=(0, 7), match='abc_xyz'>
print(matched[0])
# 出力:abc_xyz
matched = re.fullmatch(p2, s)
print(matched)
# 出力:None
pattern = re.compile(p1)
matched = pattern.fullmatch(s)
print(matched)
# 出力:<re.Match object; span=(0, 7), match='abc_xyz'>
print(matched[0])
# 出力:abc_xyz
pattern = re.compile(p2)
matched = pattern.fullmatch(s)
print(matched)
# 出力:None
split【分割】3.1 / 3.5 / 3.7
メモ
構文
例
import re
s = 'The quick brown fox jumps over the lazy dog.'
print(re.split(' ', s))
# 出力:['The', 'quick', 'brown', 'fox', 'jumps', 'over', 'the', 'lazy', 'dog.']
print(re.split(' ', s, 3))
# 出力:['The', 'quick', 'brown', 'fox jumps over the lazy dog.']
print(re.split('_*', 'abc_XYZ')) # [Python 3.7 以降]
# 出力:['', 'a', 'b', 'c', '', 'X', 'Y', 'Z', '']
pattern = re.compile(' ')
print(pattern.split(s))
# 出力:['The', 'quick', 'brown', 'fox', 'jumps', 'over', 'the', 'lazy', 'dog.']
print(pattern.split(s, 3))
# 出力:['The', 'quick', 'brown', 'fox jumps over the lazy dog.']
findall【全検索】3.7
メモ
構文
例
import re
s = 'The quick brown fox jumps over the lazy dog.'
print(re.findall(r'\w+', s))
# 出力:['The', 'quick', 'brown', 'fox', 'jumps', 'over', 'the', 'lazy', 'dog']
print(re.findall(r'(\w+)', s))
# 出力:['The', 'quick', 'brown', 'fox', 'jumps', 'over', 'the', 'lazy', 'dog']
print(re.findall(r'(\w+) (\w+)', s))
# 出力:[('The', 'quick'), ('brown', 'fox'), ('jumps', 'over'), ('the', 'lazy')]
pattern = re.compile(r'\w+')
print(pattern.findall(s))
# 出力:['The', 'quick', 'brown', 'fox', 'jumps', 'over', 'the', 'lazy', 'dog']
print(pattern.findall(s, 4, 19))
# 出力:['quick', 'brown', 'fox']
finditer【全検索 (イテレータ)】3.7
メモ
- 正規表現パターンを全て検索、結果はイテレータ
- 外部リンク
構文
re.finditer(pattern, string, flags=0)
Pattern.finditer(string[, pos[, endpos]])
イテレータ (Match【マッチオブジェクト】)
pattern正規表現パターン
string検索元文字列
flags検索フラグ
pos検索開始位置インデックス (省略:0)
endpos検索終了位置インデックス
例外re.error
※空でないマッチは、前の空マッチの直後に開始可能 3.7
例
import re
s = 'The quick brown fox jumps over the lazy dog.'
for matched in re.finditer(r'\w+', s):
print(matched[0], matched)
# 出力:The <re.Match object; span=(0, 3), match='The'>
# 出力:quick <re.Match object; span=(4, 9), match='quick'>
# 出力:brown <re.Match object; span=(10, 15), match='brown'>
# 出力:fox <re.Match object; span=(16, 19), match='fox'>
# 出力:jumps <re.Match object; span=(20, 25), match='jumps'>
# 出力:over <re.Match object; span=(26, 30), match='over'>
# 出力:the <re.Match object; span=(31, 34), match='the'>
# 出力:lazy <re.Match object; span=(35, 39), match='lazy'>
# 出力:dog <re.Match object; span=(40, 43), match='dog'>
pattern = re.compile(r'\w+')
for matched in pattern.finditer(s):
print(matched[0], matched)
# 出力:The <re.Match object; span=(0, 3), match='The'>
# 出力:quick <re.Match object; span=(4, 9), match='quick'>
# 出力:brown <re.Match object; span=(10, 15), match='brown'>
# 出力:fox <re.Match object; span=(16, 19), match='fox'>
# 出力:jumps <re.Match object; span=(20, 25), match='jumps'>
# 出力:over <re.Match object; span=(26, 30), match='over'>
# 出力:the <re.Match object; span=(31, 34), match='the'>
# 出力:lazy <re.Match object; span=(35, 39), match='lazy'>
# 出力:dog <re.Match object; span=(40, 43), match='dog'>
for matched in pattern.finditer(s, 4, 19):
print(matched[0], matched)
# 出力:quick <re.Match object; span=(4, 9), match='quick'>
# 出力:brown <re.Match object; span=(10, 15), match='brown'>
# 出力:fox <re.Match object; span=(16, 19), match='fox'>
sub【置換】3.1 / 3.5~3.7 / 3.113.12
subn【置換・置換個数取得】3.1 / 3.5~3.7 / 3.113.12
メモ
- 正規表現パターンを使用して置換
- キャプチャの参照
置換文字列内:\g<name>・\g<number> ・\number
置換関数内:Match.group()【キャプチャ参照】
- キャプチャの参照
- 関連
- 外部リンク
構文
re.sub(pattern, repl, string, count=0, flags3.1 =0)
re.subn(pattern, repl, string, count=0, flags3.1 =0)
Pattern.sub(repl, string, count=0)
Pattern.subn(repl, string, count=0)
処理結果 (未対応のキャプチャは空文字列に変換3.5 )
sub()置換後の文字列
subn()タプル (置換後の文字列, 置換個数)
pattern置換パターン (正規表現パターン・Pattern【正規表現オブジェクト】)
repl置換文字列 または 置換文字列を返却する置換関数 (引数:Match【マッチオブジェクト】)
(キャプチャの参照については、メモ 参照)
string置換元文字列
count最大置換数 (0:全置換)
flags3.1検索フラグ
例外re.error
patternに未知のASCII文字エスケープが存在3.6
replに未知のASCII文字エスケープが存在3.7
※空のマッチは、前の空でない一致に隣接する場合に置換 3.7
※ASCII数字以外のキャプチャ番号 3.11
※バイト置換文字列に非ASCII文字を含むキャプチャ名3.11
※ASCII数字以外のキャプチャ番号の使用不可 3.12
※バイト置換文字列に非ASCII文字を含むキャプチャ名の使用不可 (b'\x00'~b'\x7f'のみ有効) 3.12
例
import re
s = 'The quick brown fox jumps over the lazy dog.'
p = r'\s'
repl = ' / '
print(re.sub(p, repl, s))
# 出力:The / quick / brown / fox / jumps / over / the / lazy / dog.
print(re.subn(p, repl, s, 3))
# 出力:('The / quick / brown / fox jumps over the lazy dog.', 3)
pattern = re.compile(p)
print(pattern.sub(repl, s))
# 出力:The / quick / brown / fox / jumps / over / the / lazy / dog.
print(pattern.subn(repl, s, 3))
# 出力:('The / quick / brown / fox jumps over the lazy dog.', 3)
import re
s = 'The quick brown fox jumps over the lazy dog.'
p = r'(\w+) (?P<group2>\w+) (\w+)'
repl = r'[\3 \g<group2> \g<1>]'
print(re.sub(p, repl, s))
# 出力:[brown quick The] [over jumps fox] [dog lazy the].
print(re.subn(p, repl, s, 2))
# 出力:('[brown quick The] [over jumps fox] the lazy dog.', 2)
pattern = re.compile(p)
print(pattern.sub(repl, s))
# 出力:[brown quick The] [over jumps fox] [dog lazy the].
print(pattern.subn(repl, s, 2))
# 出力:('[brown quick The] [over jumps fox] the lazy dog.', 2)
import re
def func_repl(matched):
s = matched.group(0)
return s + '(' + str(len(s)) + ')'
s = 'The quick brown fox jumps over the lazy dog.'
p = r'\w+'
print(re.sub(p, func_repl, s))
# 出力:The(3) quick(5) brown(5) fox(3) jumps(5) over(4) the(3) lazy(4) dog(3).
print(re.subn(p, func_repl, s, 3))
# 出力:('The(3) quick(5) brown(5) fox jumps over the lazy dog.', 3)
pattern = re.compile(p)
print(pattern.sub(func_repl, s))
# 出力:The(3) quick(5) brown(5) fox(3) jumps(5) over(4) the(3) lazy(4) dog(3).
print(pattern.subn(func_repl, s, 3))
# 出力:('The(3) quick(5) brown(5) fox jumps over the lazy dog.', 3)
import re
def func_repl(matched):
return '[' + matched.group('group2') + ' ' + matched.group(1) + ']'
s = 'The quick brown fox jumps over the lazy dog.'
p = r'(\w+) (?P<group2>\w+)'
pattern = re.compile(p)
print(re.sub(p, func_repl, s))
# 出力:[quick The] [fox brown] [over jumps] [lazy the] dog.
print(re.sub(pattern, func_repl, s))
# 出力:[quick The] [fox brown] [over jumps] [lazy the] dog.
print(pattern.sub(func_repl, s))
# 出力:[quick The] [fox brown] [over jumps] [lazy the] dog.
print(re.subn(p, func_repl, s, 2))
# 出力:('[quick The] [fox brown] jumps over the lazy dog.', 2)
print(re.subn(pattern, func_repl, s, 2))
# 出力:('[quick The] [fox brown] jumps over the lazy dog.', 2)
print(pattern.subn(func_repl, s, 2))
# 出力:('[quick The] [fox brown] jumps over the lazy dog.', 2)
escape【特殊文字エスケープ】3.3 / 3.7
メモ
- 特殊文字のエスケープ
- 外部リンク
構文
re.escape(pattern)
エスケープ後の文字列
pattern文字列 (エスケープ対象は下記参照)
エスケープ対象
文字 | 文字コード | 備考 |
---|---|---|
(SP) その他 | 0x0020 その他 | ホワイトスペース |
! | 0x0021 | 対象外3.7 |
" | 0x0022 | 対象外3.7 |
# | 0x0023 | |
$ | 0x0024 | |
% | 0x0025 | 対象外3.7 |
& | 0x0026 | |
' | 0x0027 | 対象外3.7 |
( | 0x0028 | |
) | 0x0029 | |
* | 0x002A | |
+ | 0x002B | |
, | 0x002C | 対象外3.7 |
- | 0x002D | |
. | 0x002E | |
/ | 0x002F | 対象外3.7 |
: | 0x003A | 対象外3.7 |
; | 0x003B | 対象外3.7 |
< | 0x003C | 対象外3.7 |
= | 0x003D | 対象外3.7 |
> | 0x003E | 対象外3.7 |
? | 0x003F | |
@ | 0x0040 | 対象外3.7 |
[ | 0x005B | |
\ | 0x005C | |
] | 0x005D | |
^ | 0x005E | |
_ | 0x005F | 対象外3.3 |
` | 0x0060 | 対象外3.7 |
{ | 0x007B | |
| | 0x007C | |
} | 0x007D | |
~ | 0x007E |
例
import re
print(re.escape('abc()[].+*?XYZ'))
# 出力:abc\(\)\[\]\.\+\*\?XYZ
purge【正規表現キャッシュ クリア】
メモ
- 正規表現キャッシュのクリア
- 外部リンク
構文
re.purge()
なし
Match.expand【キャプチャ参照展開】3.5
メモ
- キャプチャ参照の展開
- キャプチャの参照: \g<name>・\g<number>・\number
- 関連
- 外部リンク
構文
例
import re
s = 'The quick brown fox jumps over the lazy dog.'
matched = re.search(r'(\w+) (?P<group2>\w+) (\w+) (?P<group4>\w+)', s)
print(matched)
# 出力:<re.Match object; span=(0, 19), match='The quick brown fox'>
print(matched[1], matched[2], matched[3], matched[4], sep='/')
# 出力:The/quick/brown/fox
print(matched.expand(r'\g<group4> \g<3> \g<group2> \1'))
# 出力:fox brown quick The
Match.__getitem__【キャプチャ参照 (添字参照)】3.6
Match.group【キャプチャ参照】
Match.groupdict【キャプチャ参照 (辞書)】
Match.groups【キャプチャ参照 (タプル)】
メモ
構文
Match.__getitem__(g) 3.6
※ Match[g] で参照
キャプチャ値
gキャプチャ番号 または キャプチャ名
キャプチャ番号 (0):マッチ文字列全体
キャプチャ番号 (1~):対応するキャプチャ値
キャプチャ名:対応するキャプチャ値
例外IndexError
Match.group([group1, ...])
引数0個:マッチ文字列全体
引数1個:キャプチャ値
引数2個以上:キャプチャ値のtuple【タプル型】
groupNキャプチャ番号 または キャプチャ名
キャプチャ番号 (0):マッチ文字列全体
キャプチャ番号 (1~):対応するキャプチャ値
キャプチャ名:対応するキャプチャ値
例外IndexError
Match.groupdict(default=None)
dict【辞書型】 (キャプチャ名: キャプチャ値)
default一致しないキャプチャの対応値
Match.groups(default=None)
tuple【タプル型】 (キャプチャ値)
default一致しないキャプチャの対応値
例
import re
s = 'The quick brown fox jumps over the lazy dog.'
matched = re.search(r'(\w+) (?P<group2>\w+) (\w+) (?P<group4>\w+)', s)
print(matched[0])
# 出力:The quick brown fox
print(matched[1])
# 出力:The
print(matched[2])
# 出力:quick
print(matched[3])
# 出力:brown
print(matched[4])
# 出力:fox
print(matched['group2'])
# 出力:quick
print(matched['group4'])
# 出力:fox
import re
s = 'The quick brown fox jumps over the lazy dog.'
matched = re.search(r'(\w+) (?P<group2>\w+) (\w+) (?P<group4>\w+)', s)
print(matched.group(0))
# 出力:The quick brown fox
print(matched.group(1))
# 出力:The
print(matched.group(2))
# 出力:quick
print(matched.group(3))
# 出力:brown
print(matched.group(4))
# 出力:fox
print(matched.group('group2'))
# 出力:quick
print(matched.group('group4'))
# 出力:fox
print(matched.group(3, 'group4'))
# 出力:('brown', 'fox')
import re
s = 'The quick brown fox jumps over the lazy dog.'
matched = re.search(r'(\w+) (?P<group2>\w+) (\w+) (?P<group4>\w+)', s)
print(matched.groupdict())
# 出力:{'group2': 'quick', 'group4': 'fox'}
matched = re.search(r'(?P<group1>\w+) (?P<group2>\w+) (?P<group9>xyz\w+)?', s)
print(matched.groupdict())
# 出力:{'group1': 'The', 'group2': 'quick', 'group9': None}
print(matched.groupdict('EMPTY'))
# 出力:{'group1': 'The', 'group2': 'quick', 'group9': 'EMPTY'}
import re
s = 'The quick brown fox jumps over the lazy dog.'
matched = re.search(r'(\w+) (?P<group2>\w+) (\w+) (?P<group4>\w+)', s)
print(matched.groups())
# 出力:('The', 'quick', 'brown', 'fox')
matched = re.search(r'(?P<group1>\w+) (?P<group2>\w+) (?P<group9>xyz\w+)?', s)
print(matched.groups())
# 出力:('The', 'quick', None)
print(matched.groups('EMPTY'))
# 出力:('The', 'quick', 'EMPTY')
Match.start【マッチ位置インデックス (先頭)】
Match.end【マッチ位置インデックス (末尾)】
Match.span【マッチ位置インデックス】
メモ
- マッチ位置のインデックスを取得
- 外部リンク
構文
Match.start([group])
Match.end([group])
先頭または末尾のマッチ位置インデックス
groupキャプチャ番号 または キャプチャ名
Match.span([group])
tuple【タプル型】 (先頭マッチ位置インデックス, 末尾マッチ位置インデックス)
groupキャプチャ番号 または キャプチャ名 (省略 / 0:マッチ部分全体)
例
import re
s = 'The quick brown fox jumps over the lazy dog.'
matched = re.search(r'\w*c\w*', s)
print(matched)
# 出力:<re.Match object; span=(4, 9), match='quick'>
print(matched.start())
# 出力:4
print(matched.end())
# 出力:9
print(matched.span())
# 出力:(4, 9)
matched = re.search(r'(\w+) (?P<group2>\w+) (\w+) (?P<group4>\w+)', s)
print(matched)
# 出力:<re.Match object; span=(0, 19), match='The quick brown fox'>
print(matched.start())
# 出力:0
print(matched.end())
# 出力:19
print(matched.span())
# 出力:(0, 19)
print(matched.start(1))
# 出力:0
print(matched.end(1))
# 出力:3
print(matched.span(1))
# 出力:(0, 3)
print(matched.start('group4'))
# 出力:16
print(matched.end('group4'))
# 出力:19
print(matched.span('group4'))
# 出力:(16, 19)