Latest web development tutorials

python3正規表現

正規表現は、それが簡単に文字列がパターンに一致するかどうかを確認するためにあなたを助けることができる、特別な文字シーケンスです。

Pythonはバージョン1.5、Perlスタイルを提供する正規表現パターンので、モジュールの増加を再。

モジュール再Python言語は、正規表現のすべての機能を持っていることができます。

パターン文字列とオプションのパラメータフラグから正規表現オブジェクトを生成する関数をコンパイルします。 このオブジェクトは、正規表現のマッチングと置換のためのメソッドのセットを持っています。

モジュール再また、彼らの最初の引数としてパターン文字列を使用して、これらの機能の機能と矛盾する方法を提供します。

このセクションでは、一般的なPythonの正規表現処理機能を紹介します。


re.match機能

開始位置のマッチングが成功しない場合、文字列の開始位置からパターンを一致させようとre.match、マッチ()Noneを返します。

関数のシンタックス:

re.match(pattern, string, flags=0)

関数のパラメータ:

パラメータ 説明
パターン マッチする正規表現
文字列 一致する文字列。
フラグ 大文字と小文字を区別し、マルチラインは、というように一致するかどうか、および:フラグは、正規表現のマッチングは、以下のような、制御するために使用されます。

成功したマッチre.match方法は、マッチオブジェクト、そうでない場合はなしを返します。

私たちは、一致するオブジェクトが式に一致取得するグループ(数値)またはグループ()関数を使用することができます。

オブジェクトのメソッドをマッチング 説明
グループ(NUM = 0) 式全体の文字列マッチング、グループ()はタプルのそれらのグループに対応する値を返します。その場合には、複数のグループ番号を入力することができます。
グループ() これは、グループに含まれる番号に1から、文字列のすべてのグループのタプルを返します。

実施例1:

#!/usr/bin/python
# -*- coding: UTF-8 -*- 

import re
print(re.match('www', 'www.w3big.com').span())  # 在起始位置匹配
print(re.match('com', 'www.w3big.com'))         # 不在起始位置匹配

上の例の出力は実行します。

(0, 3)
None

例2:

#!/usr/bin/python3
import re

line = "Cats are smarter than dogs"

matchObj = re.match( r'(.*) are (.*?) .*', line, re.M|re.I)

if matchObj:
   print ("matchObj.group() : ", matchObj.group())
   print ("matchObj.group(1) : ", matchObj.group(1))
   print ("matchObj.group(2) : ", matchObj.group(2))
else:
   print ("No match!!")

次のように上記実施例の結果は次のとおりです。

matchObj.group() :  Cats are smarter than dogs
matchObj.group(1) :  Cats
matchObj.group(2) :  smarter

re.searchメソッド

re.search文字列全体をスキャンし、最初に成功したマッチを返します。

関数のシンタックス:

re.search(pattern, string, flags=0)

関数のパラメータ:

パラメータ 説明
パターン マッチする正規表現
文字列 一致する文字列。
フラグ 大文字と小文字を区別し、マルチラインは、というように一致するかどうか、および:フラグは、正規表現のマッチングは、以下のような、制御するために使用されます。

成功したマッチre.searchメソッドは、マッチオブジェクト、そうでない場合はなしを返します。

私たちは、一致するオブジェクトが式に一致取得するグループ(数値)またはグループ()関数を使用することができます。

オブジェクトのメソッドをマッチング 説明
グループ(NUM = 0) 式全体の文字列マッチング、グループ()はタプルのそれらのグループに対応する値を返します。その場合には、複数のグループ番号を入力することができます。
グループ() これは、グループに含まれる番号に1から、文字列のすべてのグループのタプルを返します。

実施例1:

#!/usr/bin/python3

import re

print(re.search('www', 'www.w3big.com').span())  # 在起始位置匹配
print(re.search('com', 'www.w3big.com').span())         # 不在起始位置匹配

上の例の出力は実行します。

(0, 3)
(11, 14)

例2:

#!/usr/bin/python3

import re

line = "Cats are smarter than dogs";

searchObj = re.search( r'(.*) are (.*?) .*', line, re.M|re.I)

if searchObj:
   print ("searchObj.group() : ", searchObj.group())
   print ("searchObj.group(1) : ", searchObj.group(1))
   print ("searchObj.group(2) : ", searchObj.group(2))
else:
   print ("Nothing found!!")
次のように上記実施例の結果は次のとおりです。
searchObj.group() :  Cats are smarter than dogs
searchObj.group(1) :  Cats
searchObj.group(2) :  smarter

差分re.matchとre.search

re.matchは、文字列の先頭には、正規表現を満たしていない場合はマッチが失敗し、関数はNoneを返し、文字列の始まりに過ぎないと一致し、かつ、それが一致するものが見つかるまで、文字列全体にマッチre.search。

例:

#!/usr/bin/python3

import re

line = "Cats are smarter than dogs";

matchObj = re.match( r'dogs', line, re.M|re.I)
if matchObj:
   print ("match --> matchObj.group() : ", matchObj.group())
else:
   print ("No match!!")

matchObj = re.search( r'dogs', line, re.M|re.I)
if matchObj:
   print ("search --> matchObj.group() : ", matchObj.group())
else:
   print ("No match!!")
次のように上記の結果の例を次に示します。
No match!!
search --> matchObj.group() :  dogs

検索置換

Pythonのreモジュールは、置換文字列の一致のためにre.subを提供します。

構文:

re.sub(pattern, repl, string, count=0)

返される文字列は、一番左のREマッチした文字列を置換するために繰り返されることはありませんです。 パターンが見つからない場合、文字がそのまま返されます。

オプションのパラメータ数は、置換パターンマッチング回数の最大値であり、カウントは非負の整数でなければなりません。 デフォルト値は、すべての発生を置き換えるために、0の手段です。

例:

#!/usr/bin/python3
import re

phone = "2004-959-559 # 这是一个电话号码"

# 删除注释
num = re.sub(r'#.*$', "", phone)
print ("电话号码 : ", num)

# 移除非数字的内容
num = re.sub(r'\D', "", phone)
print ("电话号码 : ", num)
次のように上記実施例の結果は次のとおりです。
电话号码 :  2004-959-559 
电话号码 :  2004959559

正規表現修飾子 - オプションのフラグ

正規表現は一致モードを制御するための任意のフラグの修飾子を含めることができます。 修飾子は、オプションのフラグとして指定されています。 (|)ビット単位のORを介してすることができ、複数のフラグを指定します。 re.Iとして| re.Mは私とMフラグに設定されています:

修飾子 説明
re.I だからマッチングでは、大文字と小文字は区別されていません
re.L ローカリゼーション識別を行う(ロケール対応)マッチング
re.M ^と$に影響を与えるマルチラインのマッチング、
re.S 改行を含むSoがは、すべての文字にマッチ
re.U Unicode文字セットの文字を解決するためによります。 このフラグは、\ W、\ bの、\ B. \ wに影響を与えます
re.X あなたが理解しやすい正規表現を記述するように、あなたがより柔軟なフォーマットを与えることによって、このフラグ。

正規表現パターン

正規表現を示すために特別な構文を使用して、パターン文字列:

文字や数字そのもの。 文字と数字の正規表現パターンは、同じ文字列に一致します。

前にバックスラッシュを付けたときに文字と数字のほとんどは、異なる意味を持つことになります。

試合自体は、または彼らは特別な意味を表すときに句読点のみがエスケープされます。

バックスラッシュ自身は、バックスラッシュ・エスケープを使用する必要があります。

正規表現は、通常、バックスラッシュを含んでいるので、あなたがそれらをよりよく表現するために、元の文字列を使用すると思います。 ( '//トン'と同じようなR '/ T'など、)スキーマ要素は、対応する特殊文字に一致します。

次の表は、正規表現パターンの構文の特定の要素を示しています。 もしあなたの使用パターンオプションのflags引数を提供しながら、パターンの特定の要素の意味が変更されます。

モード 説明
^ 文字列の先頭にマッチします
$ 文字列の末尾にマッチします。
改行以外の任意の文字と一致re.DOTALLフラグが指定されている場合、あなたは改行を含む任意の文字を一致させることができます。
[...] 【AMK]マッチ ''、 'M'または 'K':それは別々に記載されている文字のグループを表すのに使用しました
[^ ...] いない[]の文字は:[^ abc]はA、B、Cの文字に加えて、一致しました。
*再 表現マッチングの0以上。
+再 マッチング表現の一つまたはそれ以上。
再? セグメントを定義するために、上記の正規表現による一致0または1、非欲張りな方法
{n}が再
{、n}が再 nは直前の式の完全一致。
再{N、M} セグメントを定義するために、上記の正規表現によりm倍にマッチnは、貪欲な方法
| B 一致またはb
(再) 括弧内のGマッチ発現は、また、基を表します
(?IMX) 正規表現は、3つのオプションのフラグで構成されています。私、メートル、またはX。 これは、括弧内の領域のみに影響します。
(?-imx) 正規表現I、M、またはXオプションのフラグ閉じます。 これは、括弧内の領域のみに影響します。
(:?再) (...)似ていますが、グループを表すものではありません。
(IMX :?再) 私は、括弧、メートル、またはXにオプションのフラグを使用します
(-imx :?再) 私は、括弧内のメートルを使用するか、オプションのフラグをxはしないでください
(?#...) 注意してください。
(?=再) 必ず区切り文字を転送します。 ...によってここに表さ含まれている正規表現、場合、正常に現在の場所にマッチし、それ以外の場合は失敗します。 含まれている式が試みられてきたしかし、一度、マッチングエンジンは進みません。パターンの残りの部分は、偶数デリミタ右してみてくださいされています。
(?!Re)が 前方否定デリミタ。 そして、確かに反し区切り;成功含まれる式は文字列内の現在位置と一致していません
(?>再) 独立したパターンマッチング、バックトラックを排除します。
\ W マッチ英数字
\ W 英数字以外にマッチ
\ S マッチ[\トン\ nは\ rを\ f]のと同等の任意の空白文字を、。
\ S 任意の非空白文字に一致します
\ D [0-9]と等価である任意の数と一致します。
\ D 任意の非数値と一致します
\ A 文字列の先頭にマッチします
\ Z 一致文字列の最後には、改行にマッチする文字列の両端だけ前に、改行が存在する場合。 C言語
\ Z 一致文字列の末尾
\ G 一致一致は、最後の位置を完了しました。
\ B つまり、それは言葉の間の位置とスペースを指し、単語の境界に一致します。 例えば、「小胞体\ b 'は' er」との "決して"と一致しないことができますが、「ER」で「動詞」を一致させることはできません。
\ B 非ワード境界と一致します。 「Erを\ B」は、「er」との「動詞」を一致させることができますが、「決して」「えー」内に一致することはできません。
\ N、\ tの、などが挙げられます。 改行にマッチします。 タブ文字に一致します。 待って
\ 1 ... \ 9 パケットのn番目のサブ式に一致します。
\ 10 それは試合後にある場合は、最初のn個のパケットの部分式に一致します。 そうでなければ、式8進文字コードを意味します。

正規表現の例

文字の一致

説明
パイソン 「パイソン」をマッチング。

文字クラス

説明
【Ppを] ython 「パイソン」または「パイソン」をマッチング
こする[がた] マッチ「ルビー」または「ルーブ」
[AEIOU] マッチング括弧内の文字のうちの任意の1文字
[0-9] 任意の数字にマッチします。 同様に[0123456789]
[AZ] 任意の小文字に一致します
[AZ] 任意の大文字に一致します
[A-ZA-Z0-9] 任意の文字と数字を照合し
[^ AEIOU] 文字以外のすべての文字に加えてAEIOU
[^ 0-9] 数字以外の文字をマッチング

特殊文字クラス

説明
"\ n"以外の任意の1文字に一致しています。 、 '\ n'を含めての使用と同様に、任意の文字を含めて一致させるには '[。\ N]'モード。
\ D 桁の文字と一致します。 [0-9]に相当します。
\ D 数字以外の文字に一致します。 これは[^ 0-9]と等価です。
\ S ようにスペース、タブ、改ページ、およびを含む任意の空白文字にマッチします。 [\ F \ nは\ rを\トン\ V]に相当します。
\ S 任意の非空白文字に一致します。 等価である[^ \ F \ nは\ rを\トン\ V]。
\ W アンダースコアを含む任意の単語文字と一致しています。 それは[A-ZA-Z0-9_] 'と等価です。
\ W 任意の非単語文字と一致します。 これは、 '[^ A-ZA-Z0-9_]'と等価です。