python3クイックスタート(7) - のpython3正規表現

python3クイックスタート(7) - のpython3正規表現

1、reモジュールの紹介

reモジュールは、Python言語は、すべての正規表現を持っている、Perlスタイルの正規表現パターンを提供します。

2、正規表現パターン

パターン文字列の正規表現表現するために特別な構文を使用して:
同じ英数字の文字列にマッチする正規表現パターンを、バックスラッシュ、ほとんどの文字と数字の前に異なる意味を持っている。通常、句読点彼らの試合が脱出しただけで、特別な意味は、バックスラッシュ自体はバックスラッシュエスケープを使用する必要があります。
文字列^の開始
$は文字列の末尾にマッチする
。、改行以外の任意の文字と一致re.DOTALLフラグが指定されている場合、任意の文字が改行を含んで一致します。
[...] re.DOTALLフラグが指定されている場合、それは任意の文字が改行を含んで一致し、改行以外の任意の文字に一致します。
[^ ...]改行以外の任意の文字に一致し、re.DOTALLフラグが指定されている場合、任意の文字が改行を含んで一致します。
REがゼロ以上の式と一致します。
再+ 1以上の一致表現。
再?直前の正規表現定義断片によって一致0又は1、非貪欲方法の
再{n}は先行の式のNに一致します。例えば、「oは{2}」「O」の「ボブ」に一致しないが、二つのOで「食物」と一致することができます。
再{N}発現に先行するN正確に一致します。例えば、「O {2}」「O」の「ボブ」に一致しないが、それはのすべてのO「foooood」と一致することができます。"O- {1}" "O +"に相当します。"O {0}"に相当する"O
"。
再{N、
M}断片、貪欲な方法の定義直前の正規表現にマッチn倍にM aは| bはまたはBと一致する
括弧内の(Re)が一致式をするだけでなく、グループを表す
(?IMX)は、3つの正規表現を含みますオプションのフラグ:I、M、またはX。それだけで地域の括弧に影響を与えます。
(?-imx)正規表現I、M、X、またはオプションのフラグを閉じました。それだけで地域の括弧に影響を与えます。
(IMX :?再)括弧内のI、M、X、またはオプションのフラグを使用
(再-imxを:?)I、括弧内メートル、またはオプションのフラグをxは使用しないでください
コメント(#...?)を
(? =確認するために、区切り文字の前に)再。正規表現が順番に含まれている場合は...現在のマッチ位置の成功の成功は、それ以外の場合は失敗しました。しかし、一度に含まれる表現は、マッチングエンジンは進まない、試みられてきたが、パターンの残りの部分は、さらに右の区切り文字をしようとしています。
区切り文字の前にマイナス(?!再)。そして、反対の正のアサーション;文字列に含まれる式は、ときに現在の位置が一致し成功することはできません。
(?> Re)が独立したパターンマッチング、バックトラックを排除します。
\ W一致英数字下線
\ W一致英数字以外下線
\ sが[\ T \ n \ R \と同等の任意の空白文字、一致 F]を。
\ Sは、null以外の文字と一致し
、\ dは任意の数と一致し、[0-9]と等価です。
\ Dは、任意の非数値と一致する
\ A文字列の先頭に一致する
ラップは、ラインフィードと一致する文字列の唯一の前端存在する場合\ Zは、文字列の末尾に一致します。
\ Zマッチストリング終了
\ Gは完全な最後の位置合わせを一致します。
\ Bは、ワード境界に一致する、それは単語間の位置と空間のことをいいます。例えば、「ERの\ bは、」「ER」内のER「」とは一致しません「動詞」で「決して」と一致しません。
\ B非単語境界に一致します。「えー\ B」「ER」内のマッチ「動詞」を、しかし「決して」「中が一致しません 「えー。
\ nは、\ tは、改行にマッチ。マッチングタブ
\ 1 ... \ 9は、n番目のパケットにマッチします。
それが一致した場合\ 10は、n番目のパケットの内容を一致させます。それ以外の場合は、式が進文字コードを指します。

3、正規表現の例

Pythonのマッチング"パイソン"
[Ppの】ythonマッチング"パイソン"または"パイソン"
[AEIOU]マッチング括弧内の任意の文字
[0-9]は任意の数字に一致
[AZ]が一致する任意の小文字
[AZ]は、任意の大文字と一致します
[a-zA-Z0-9]は、任意の文字と数字と一致
[^ AEIOU] AEIOU文字以外のすべての文字にマッチ
の数に加えて、[^ 0-9]マッチング文字を

図4は、共通機能モジュールを再

re.compile(パターン[、フラグ])
コンパイル機能は、パターン文字列とオプションのパラメータフラグに応じて正規表現オブジェクトを生成するために、発現対象の一連の交換および正規表現マッチングのための方法です。
パターン:正規表現の文字列
あるいはフラグ、マッチングモードは特定のパラメータを表す:
re.Iは、ケースを無視するには
、W \ \ W、\ bの特殊文字を表すre.L 、\のB、\ Sは、 \ Sは、現在の環境に依存し
re.Mの複数行モード
「(」。改行は含まれません)「で、改行を含む任意の文字を含み、」re.S
re.U \ W、W \特殊文字を表します、\ bの、\ B、\ D、\ D、\ S、\ Sは、Unicode文字プロパティデータベースに依存して
、スペースを無視して、読みやすくするためre.X、そして後に'#'コメント
、re.match(パターン、文字列フラグ= 0)が
開始位置からパターン文字列と一致しようとすると、最初のマッチングが成功したマッチング・オブジェクト、そうでなければなしで返します。
正規表現パターンマッチングの
文字列が一致します。
か否かを大文字と小文字を区別し、マルチラインマッチング等:のような正規表現マッチング方法を制御するためのフラグフラグ。
もし、一致するオブジェクト整合発現を得るためにグループ(数値)またはグループ()関数を使用することができます。グループ()は、タプルの値に対応する基を含有するものが返された場合、入力グループ番号、複数であってもよいです。
re.search(パターン、文字列、フラグ= 0)
re.searchまず文字列全体をスキャンし、成功したマッチを返します。
Re.search方法は、一致の成功、それ以外の場合はなしに一致するオブジェクトを返します。
もし、一致するオブジェクト整合発現を得るためにグループ(数値)またはグループ()関数を使用することができます。
re.sub(パターン、REPL、文字列、COUNT = 0、フラグ= 0)
置換文字列にマッチするためre.sub。
パターン:通常のパターン文字列インチ
REPL:文字列を置換、それは関数であってもよいです。
文字列:元の文字列を交換する見つけます。
カウント:パターンマッチングの置換の最大数は、デフォルトで0がすべての出現を置き換えることを意味します。
フラグ:コンパイル時間に対するパターン、デジタル形式で
のfindAll(文字列[、POS [、 endposの]])は
、その後、正規表現は文字列内のすべてのサブストリングに一致が見出され、一致が見つからない場合、リストを返します空のリストを返します。
マッチする文字列。
posのオプションのパラメータは、文字列の開始位置を指定し、デフォルトは0です。
endposの文字列、文字列の長さのデフォルトの終了位置を指定するオプションのパラメータ。
re.finditer(パターン、文字列、フラグ= 0)は
、すべてのサブストリングに一致した文字列式で正見出され、そして反復子によって返された検索結果として。
re.split(パターン、文字列[、maxsplit個 = 0、フラグ= 0])
文字列を分割文字列分割方法のリストを返すサブに従って一致させることができる
正規表現パターンマッチング
文字列と一致する文字列が。
maxsplit個パーティション番号、maxsplit個= 1回数は限定されるものではなく、デフォルトは0であり、分離しました。
大文字と小文字を区別し、複数行マッチングか否か、等:のような方法と一致する正規表現を制御するためのフラグフラグ

# -*- coding:utf-8 -*-
import re

# 将匹配的数字乘于 2
def double(matched):
    value = int(matched.group('value'))
    return str(value * 2)

if __name__ == '__main__':
    phone = "2004-959-559"
    # 返回第一个匹配的对象
    groups = re.match("\d+", phone)
    print(groups.group(0))
    # 返回第一个匹配的对象
    groups = re.search("\d+", phone)
    print(groups.group(0))
    # 返回匹配的所有对象的数组
    groups = re.findall("\d+", phone)
    print(groups)

    num = re.sub(r'\D', "", phone)
    print("Phone:", num)

    s = 'A23G4HFD567'
    print(re.sub('(?P<value>\d+)', double, s))

# output:
# 2004
# 2004
# ['2004', '959', '559']
# Phone: 2004959559
# A46G8HFD1134

おすすめ

転載: blog.51cto.com/9291927/2416024