モジュールの機能は主に文字列やテキストの処理、検索、検索、置換などに使用されます。
基本的な正規表現を確認してください
.: 改行文字を除く任意の単一文字
と一致します*: 任意の文字に一致します。1 つ、0 個、または複数の文字に一致します。一般に貪欲モード
と呼ばれます。+: + の前の 1 つ以上の文字
と一致します|: | の前後の文字
と一致します。^: 行の先頭と一致します
$: 行末と一致
?: 一致する場所は?先行する 0 文字または 1 文字が複数の文字と一致しません
: 次の文字がエスケープ文字であることを示します
[]: [] 内の任意の 1 文字と一致します。[0-9] は 0 から 9 までの任意の数字と一致することを意味します
(): () 内のコンテンツを全体として扱います
{}: {} 内の回数に従って一致します。100[0-9]{3} は、100 の後の任意の 3 桁の数字 (100-999) と一致することを意味します
で始まるメタキャラクター: Python の
特殊シーケンスシンボル |
意味 |
A |
文字列の先頭のみ一致 |
Z |
文字列の末尾のみ一致 |
b |
先頭または末尾の空の文字列と一致します |
B |
先頭または末尾にない空の文字列と一致します |
d |
は [0-9] | と同等です
D |
は [^0-9] | と同等です
の |
は任意の空白文字と一致します: [tnrrv] |
S |
は空白以外の文字と一致します: [^tnrrv] |
w |
任意の数字と文字に一致します: [a-zA-Z0-9] |
W |
数字と文字以外の任意の文字に一致します: [^a-zA-Z0-9] |
正規表現構文テーブル
文法 | 意味 | 説明 |
"." | 任意の文字 |
|
"^" | 文字列の先頭 | '^hello' は 'helloworld' に一致しますが、'aaaahellobbbb' | には一致しません
"$" | 文字列の終わり | 同上 |
"*" |
0 文字以上 (貪欲一致) |
f9905dec65b53e7277c4d818a36cc3f5一致b2386ffb911b14667cb8f0f91ea547a7chinaunix6e916e0f7d1e588d4f442bf645aedb2f |
"+" |
1 つ以上の文字 (貪欲一致) |
同上 |
「?」 |
0 文字以上 (貪欲一致 ) |
同上 |
*?,+?,?? |
上記 3 つの最初の一致結果を取得します (貪欲でない一致 ) |
f9905dec65b53e7277c4d818a36cc3f5 と一致しますb2386ffb911b14667cb8f0f91ea547a7 |
{m,n} |
前の文字を m 回から n 回繰り返します。{m} は にすることもできます |
a{6} は 6 a に一致し、a{2,4} は 2 ~ 4 a | に一致します。
{m,n}? |
前の文字をできるだけ少なくして m ~ n 回繰り返します |
「ああああああ」 ({2,4})2 つの | のみに一致します
"\" |
特殊文字エスケープまたは特殊シーケンス |
|
[] |
は文字セット | を表します[0-9]、[a-z]、[A-Z]、[^0] |
"|" |
または | A|B、または操作 |
(...) |
は括弧内の任意の式と一致します |
|
(?#...) |
コメント、無視して構いません |
|
(?=...) |
... が next と一致する場合に一致しますが、文字列は消費しません。 |
'(?=test)' は hellotest の hello | と一致します
(?!...) |
... が次に一致しない場合に一致します。 |
'(?!=test)' hello の後に test が続かない場合は、hello と一致します |
(?<=...) |
... が前にある場合に一致します (固定長である必要があります)。 |
'(?<=hello)test' は hellotest の test と一致します |
(? |
先頭に ... がなければ一致します (固定長である必要があります)。 |
'(?test' が hellotest の test と一致しません |
一致する記号と意味
标志 | 含义 |
re.I | 大文字と小文字を区別する |
re.L | ローカル設定に従って、w、W、b、B、s、S の一致する内容を変更します |
re.M | 複数行のマッチングパターン |
re.S | 「.」メタ文字を改行と一致させる |
re.U | は Unicode 文字 と一致します |
re.X | 一致する必要があるパターン内のスペースを無視し、「#」記号を使用してコメントすることができます |
テキストコンテンツ (Linux でのパスワードファイルの抽出)
man:x:6:12:man:/var/cache/man:/bin/nologin
re モジュールには 3 つの検索関数があり、各関数は 3 つのパラメーター (一致するモード、一致する文字列、一致するフラグ) を受け取ります。一致するものがあれば、オブジェクト インスタンスが返されます。何も返されません。
findall(): 文字列内の正規表現に一致する文字列を検索し、これらの文字列のリストを返すために使用されます
search(): 文字列全体を検索し、オブジェクト インスタンスを返します
match(): 最初の文字からのみ一致し、それ以降の文字は一致せず、オブジェクト インスタンスが返されます
lovelinux@LoveLinux:~/py/boke$ cat text man:x:6:12:man:/var/cache/man:/bin/sh lovelinux@LoveLinux:~/py/boke$ cat test.py #/usr/bin/env python #coding:utf-8 import re with open('text','r') as txt: f = txt.read() print re.match('bin',f) print re.search('bin',f).end() lovelinux@LoveLinux:~/py/boke$ python test.py None 34 lovelinux@LoveLinux:~/py/boke$ vim test.py lovelinux@LoveLinux:~/py/boke$ python test.py None <_sre.SRE_Match object at 0x7f12fc9f9ed0>
返されたオブジェクト インスタンスには 2 つのメソッドがあります。
start(): レコード
と一致する文字の開始インデックスを返します。end(): レコード
と一致する文字の終了インデックスを返します。lovelinux@LoveLinux:~/py/boke$ python test.py None 31 34 lovelinux@LoveLinux:~/py/boke$ cat test.py #/usr/bin/env python #coding:utf-8 import re with open('text','r') as txt: f = txt.read() print re.match('bin',f) print re.search('bin',f).start() print re.search('bin',f).end()