Pythonの5つの正規表現

この記事では、知識グラフを構築するための基礎として、グラフデータベースや正規表現などのPython正規表現を主に紹介しますが、それらについて知る必要があります。これらのブログはすべて、将来の基盤を築くためのものです。 。ナレッジグラフの詳細については、「ナレッジグラフシリーズ」の列をフォローしてください


目次

1.はじめに

2、re.match関数

2.1機能紹介

2.2例

三、re.search機能

3.1機能紹介

3.2例

4、検索して置換

4.1機能紹介

4.2非関数replパラメーターの例

4.3replパラメーターは関数の例です

5、re.compile関数

5.1機能紹介

5.2例

6、findall関数

6.1機能紹介

6.2例

セブン、re.finditer関数

7.1機能紹介

7.2例

8つのre.split関数

8.1関数の紹介

9.その他

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

9.2正規表現パターン


 

1.はじめに

Pythonは、バージョン1.5以降、Perlスタイルの正規表現パターンを提供するreモジュールを追加しました。正規表現は文字の特別なシーケンスであり、文字列が特定のパターンに一致するかどうかを簡単に確認するのに役立ちます。reモジュールは、Python言語にすべての正規表現関数を持たせるようにします。コンパイル関数は、パターン文字列とオプションのフラグパラメータに基づいて正規表現オブジェクトを生成します。このオブジェクトには、正規表現の照合と置換のための一連のメソッドがあります。reモジュールは、これらのメソッドとまったく同じ関数も提供します。これらの関数は、最初のパラメーターとしてパターン文字列を使用します。次に、これらの関数について詳しく見ていきましょう。

2、re.match関数

2.1機能紹介

re.match関数は、文字列の先頭からパターンを一致させようとします。最初に一致が成功しなかった場合、match()はnoneを返し、一致が成功した場合は、一致したオブジェクトを返します。構文形式は次のとおりです。

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

関連するパラメータは次のとおりです。

group(num)またはgroups()マッチングオブジェクト関数を使用して、マッチング式を取得できます。

2.2例

import re

if __name__ == '__main__':

    test_data = "This is a test data: My name is xzw."
    match_object = re.match(r'(.*) is (.*?) .*', test_data, re.M | re.I)
    if match_object:
        print("match_object.groups() : ", match_object.groups())
        print("match_object.group() : ", match_object.group())
        print("match_object.group(1) : ", match_object.group(1))
        print("match_object.group(2) : ", match_object.group(2))
    else:
        print("No match!!")

この結果を出力すると、次のことがわかります。

三、re.search機能

3.1機能紹介

re.search関数は、最初の一致が見つかるまで、文字列内のパターン一致を検索します。構文は次のとおりです。

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

関数パラメーターは次のように説明されます。

同様に、re.searchメソッドは、一致が成功した場合は一致したオブジェクトを返し、それ以外の場合はNoneを返します。

3.2例

import re

if __name__ == '__main__':

    test_data = "This is a test data: My name is xzw."
    match_object = re.search( r'(.*) name (.*?) .*', test_data, re.M|re.I)
    if match_object:
        print("match_object.groups() : ", match_object.groups())
        print("match_object.group() : ", match_object.group())
        print("match_object.group(1) : ", match_object.group(1))
        print("match_object.group(2) : ", match_object.group(2))
    else:
        print("No match!!")

関数の結果は次のとおりです。

注: re.match関数は文字列の先頭にのみ一致します。文字列が最初の正規表現と一致しない場合、一致は失敗し、関数はNoneを返しますが、re.search関数は一致するまで文字列全体を照合します。見つかった。

2つの違いを区別するために例を見てみましょう。

import re

if __name__ == '__main__':

    test_data = "This is a test data: My name is xzw."
    search_object = re.search(r'name', test_data, re.M | re.I)
    if search_object:
        print("search_object.group() : ", search_object.group())
    else:
        print("No search!!")

    match_object = re.match(r'name', test_data, re.M | re.I)
    if match_object:
        print("match_object.group() : ", match_object.group())
    else:
        print("No match!!")

出力は次のとおりです。

4、検索して置換

4.1機能紹介

re.sub関数は、文字列内の一致を置き換えるために使用されます。構文は次のとおりです。

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

その中で、replパラメーターは関数にすることができます。 

4.2非関数replパラメーターの例

import re

if __name__ == '__main__':
    phone = "187-1111-1111  # 这是一个移动的电话号码"

    # 删除字符串中的注释内容
    number = re.sub(r'#.*$', "", phone)
    print("phone: ", number)

    # 删除非数字(-)的字符串
    number = re.sub(r'\D', "", phone)
    print("phone: ", number)

操作の結果は次のとおりです。

4.3replパラメーターは関数の例です

import re


def multiply(match_num):
    '''
    将匹配到的数字乘以2
    :param match_num: 匹配到的数字
    :return: 返回处理后的结果
    '''
    value = int(match_num.group('value'))
    return str(value * 2)


if __name__ == '__main__':
    s = '12354HFD567'
    print(re.sub('(?P<value>\d+)', multiply, s))

操作の結果は次のとおりです。

5、re.compile関数

5.1機能紹介

コンパイル関数は、正規表現をコンパイルし、match()関数とsearch()関数で使用する正規表現(Pattern)オブジェクトを生成するために使用されます。構文は次のとおりです。

re.compile(pattern[, flags])

パラメータの説明は次のとおりです。

(1)pattern: 一个字符串形式的正则表达式
(2)flags: 可选,表示匹配模式,比如忽略大小写,多行模式等,具体参数为:
	re.I 忽略大小写
	re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境
	re.M 多行模式
	re.S 即为 . 并且包括换行符在内的任意字符(. 不包括换行符)
	re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于Unicode字符属性数据库
	re.X 为了增加可读性,忽略空格和 # 后面的注释

5.2例

import re

if __name__ == '__main__':
    pattern = re.compile(r'\d+')  # 用于匹配至少一个数字

    m1 = pattern.match('aaa123bbb456ccc789')  # 查找头部,没有匹配
    print(m1)

    m2 = pattern.match('aaa123bbb456ccc789', 2, 10)  # 从'a'的位置开始匹配,没有匹配
    print(m2)

    m3 = pattern.match('aaa123bbb456ccc789', 3, 10)  # 从'1'的位置开始匹配,正好匹配
    print(m3)

    print(m3.group(), m3.start(), m3.end(), m3.span())

操作の結果は次のとおりです。

上記の例では、一致が成功するとMatchオブジェクトが返されます。ここで、group([group1、…])メソッドを使用して1つ以上のグループ化された一致文字列を取得します。一致した部分文字列全体を取得する場合は、次のことができます。 group()またはgroup(0)を直接使用します。start([group])メソッドを使用して、文字列全体で一致した部分文字列の開始位置(部分文字列の最初の文字のインデックス)とデフォルト値を取得します。パラメータの値は0です。end([group])メソッドは、文字列全体(部分文字列+1の最後の文字のインデックス)で一致した部分文字列の終了位置を取得するために使用されます。パラメータのデフォルト値は0です。 span([group])メソッドReturn(start(group)、end(group))。

6、findall関数

6.1機能紹介

文字列内の正規表現に一致するすべての部分文字列を検索し、リストを返します。一致するものが見つからない場合は、空のリストが返されます。構文は次のとおりです。

findall(string[, pos[, endpos]])

パラメータの説明は次のとおりです。

1、string: 待匹配的字符串。
2、pos: 可选参数,指定字符串的起始位置,默认为0。
3、endpos: 可选参数,指定字符串的结束位置,默认为字符串的长度。

6.2例

import re

if __name__ == '__main__':
    pattern = re.compile(r'\d+')  # 查找数字

    result1 = pattern.findall('This is a test data: My name is xzw.')
    result2 = pattern.findall('dhfsa3bn45tdfs', 0, 10)

    print(result1)
    print(result2)

結果は次のとおりです。

セブン、re.finditer関数

7.1機能紹介

findall関数と同様に、文字列内の正規表現に一致するすべての部分文字列を検索し、それらをイテレータとして返します。構文は次のとおりです。

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

7.2例

import re

if __name__ == '__main__':
    iter = re.finditer(r"\d+", "vfdkl4teree87693n2342ln")
    for match in iter:
        print(match.group())

結果は次のとおりです。

8つのre.split関数

8.1関数の紹介

splitメソッドは、一致する可能性のある部分文字列に従って文字列を分割し、リストを返します。構文は次のとおりです。

re.split(pattern, string[, maxsplit=0, flags=0])

パラメータの説明は次のとおりです。

9.その他

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

正規表現には、一致するパターンを制御するためのオプションのフラグ修飾子を含めることができます。修飾子はオプションのフラグとして指定されます。複数のフラグは、ビットごとのOR(|)で指定できます。

9.2正規表現パターン

パターン文字列は、特別な構文を使用して正規表現を表します。文字と数字はそれ自体を表します。正規表現パターンの文字と数字は同じ文字列に一致します。ほとんどの文字と数字の前に円記号を追加すると、意味が異なります。句読点は、エスケープされた場合にのみ一致します。それ以外の場合は、特別な意味があります。バックスラッシュ自体は、バックスラッシュでエスケープする必要があります。正規表現には通常バックスラッシュが含まれているため、それらを表すには生の文字列を使用するのが最適です。パターン要素(「// t」と同等のr '/ t'など)は、対応する特殊文字と一致します。次の図は、正規表現パターン構文の特別な要素を示しています。パターンの使用中にオプションのフラグパラメータを指定すると、一部のパターン要素の意味が変わります。

 

 

この記事は終了しました。この記事では主にPythonの正規表現について説明します。これは、W3CSchoolチュートリアルを参照していますその過程でどのような問題に遭遇しましたか、メッセージを残してください、あなたがすべて遭遇した問題を見てみましょう〜

おすすめ

転載: blog.csdn.net/gdkyxy2013/article/details/109618809