Python 正規表現の構文を例とともに詳しく説明します

Tomorin
リリース: 2018-08-23 17:47:15
オリジナル
1724 人が閲覧しました

前の記事では、Python 正規表現の概要を説明しました。実際、正規表現は特殊な文字シーケンスであり、文字列がパターンに一致するかどうかを簡単にチェックするのに役立ちます。 Python にはバージョン 1.5 以降、Perl スタイルの正規表現パターンを提供する re モジュールが追加されました。 re モジュールは、Python 言語に完全な正規表現機能をもたらします。コンパイル関数は、パターン文字列とオプションのフラグ引数に基づいて正規表現オブジェクトを生成します。このオブジェクトには、正規表現の一致と置換のための一連のメソッドがあります。 re モジュールには、これらのメソッドとまったく同じ関数も用意されています。これらの関数は、パターン文字列を最初のパラメータとして使用します。この章では、Python でよく使用される 正規表現 処理関数を主に紹介します。

String はプログラミングにおいて最も複雑なデータ構造であり、string を操作する必要がある場所はほとんどどこでもあります。たとえば、文字列 が正当な電子メール アドレスであるかどうかを判断するには、program で @ の前後の部分文字列を抽出し、それが単語であるかドメインであるかを個別に判断することができます。しかし、これは面倒なだけでなく、コードの再利用が困難になります。

正規表現は、文字列を照合するために使用される強力な武器です。その設計思想は、記述言語を使用して文字列のルールを定義することです。ルールに準拠する文字列はすべて「一致」とみなされます。それ以外の場合、文字列は不正です。

したがって、文字列が正当な電子メールであるかどうかを判断する方法は次のとおりです:

1. 電子メールに一致する正規表現を作成します;

2. この正規表現を使用します。ユーザーの入力を照合して、それが合法かどうかを判断します。

正規表現は文字列でも表されるため、まず文字を使用して文字を記述する方法を理解する必要があります。

正規表現では、文字を直接指定すると完全一致となります。数値と一致させるには \d を使用し、文字または数字と一致させるには \w を使用します:

1. '00\d' は '007' と一致しますが、'00A' と一致することはできません;

2.'\d\d\d' は '010' に一致します;

3.'\w\w\d' は 'py3' に一致します;

. 任意の文字に一致します

5.'py.' は、'pyc'、'pyo'、'py!' などと一致します。

可変長文字を一致させるには、

正規表現式で、* を使用して任意の数の文字 (0 を含む) を表し、 を使用して少なくとも 1 つの文字を表し、? を使用して0 または 1 文字を表します。n 文字を表すには {n} を使用します。n-m 文字を表すには {n,m} を使用します。

複雑な例を見てみましょう: \d{3}\s \d{3 ,8} 。

左から右に解釈してみましょう:

1.\d{3} は、「010」などの 3 つの数字の一致を意味します;

2.\s OK 一致スペース (タブやその他の空白文字を含む)、つまり \s は ' '、' ' などの一致など、少なくとも 1 つのスペースを意味します;

3.\d{3,8} は 3- を意味します8 数値 (例: '1234567')。

まとめると、上記の正規表現は、任意の数のスペースで区切られた市外局番を持つ電話番号を照合できます。

「010-12345」のような番号を照合したい場合はどうすればよいですか? 「-」は特殊文字であるため、正規表現では「\」を使用してエスケープする必要があるため、上記の正規表現は \d{3}\-\d{3,8} となります。

ただし、「010 - 12345」はスペースがあるため依然として一致できません。したがって、より複雑なマッチング方法が必要になります。

Advanced

より正確に一致させるには、次のように [] を使用して範囲を表すことができます:

1 . [0-9a-zA-Z\_] は数字、文字、またはアンダースコアと一致します。

2.[0-9a-zA-Z\_] は少なくとも 1 つの数字、文字、またはアンダースコアと一致します。 「a100」、「0_Z」、「Py3000」などの文字列;

3.[a-zA-Z\_][0-9a-zA-Z\_]* と一致する可能性があります文字またはアンダースコアで始まり、Python で有効な変数である数字、文字、またはアンダースコアで構成される任意の数の文字列が続きます;

4.[a-zA-Z\_][0] -9a -zA-Z\_]{0, 19} は、変数の長さをより正確に 1 ~ 20 文字 (最初の文字の後は最大 19 文字) に制限します。

A|B は A または B と一致するため、(P|p)ython は「Python」または「python」と一致します。

##^ は行の先頭を意味し、^\d は数字で始まらなければならないことを意味します。

$ は行の終わりを示し、\d$ は数字で終わる必要があることを示します。

py は 'python' とも一致することに気づいたかもしれませんが、^py$ を追加すると行全体の一致になるため、'py' とのみ一致します。

モジュール

有了准备知识,我们就可以在Python中使用正则表达式了。Python提供re模块,包含所有正则表达式的功能。由于Python的字符串本身也用\转义,所以要特别注意:

s = 'ABC\\-001' # Python的字符串
# 对应的正则表达式字符串变成:
# 'ABC\-001'
ログイン後にコピー

因此我们强烈建议使用Python的r前缀,就不用考虑转义的问题了:

s = r'ABC\-001' # Python的字符串
# 对应的正则表达式字符串不变:
# 'ABC\-001'
ログイン後にコピー

先看看如何判断正则表达式是否匹配:

>>> import re
>>> re.match(r'^\d{3}\-\d{3,8}$', '010-12345')
<_sre.SRE_Match object; span=(0, 9), match=&#39;010-12345&#39;
>>>> re.match(r&#39;^\d{3}\-\d{3,8}$&#39;, &#39;010 12345&#39;)
>>>
ログイン後にコピー

match()方法判断是否匹配,如果匹配成功,返回一个Match对象,否则返回None。常见的判断方法就是:

test = &#39;用户输入的字符串&#39;
if re.match(r&#39;正则表达式&#39;, test):
    print(&#39;ok&#39;)
else:
    print(&#39;failed&#39;)
ログイン後にコピー


以上がPython 正規表現の構文を例とともに詳しく説明しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート