ホームページ  >  記事  >  バックエンド開発  >  Python の正規表現の詳細な紹介

Python の正規表現の詳細な紹介

不言
不言転載
2018-10-18 17:15:232588ブラウズ

この記事では、Python の正規表現について詳しく説明します。一定の参考値があります。困っている友達は参考にしてください。お役に立てれば幸いです。

Regular

re = Regular experssion
re モジュールを使用すると、Python 言語ですべての正規表現関数を使用できるようになります。
コンパイル関数は、パターン文字列とオプションのフラグ パラメーターに基づいて正規表現オブジェクトを生成します。このオブジェクトには、正規表現の一致と置換のための一連のメソッドがあります。

機能: 文字列を処理するときに、文字列の内容が作成した正規表現と一致するかどうかをチェックします。

一致した場合は、一致した内容を取り出します。
一致しない場合は、コンテンツの一致;

正規ルールの記述

パターン マッチング正規表現
string 一致させる文字列

3 つの検索方法

1). findall
import re

str = 'hello sheen,hello cute.'

pattern_1 = r'hello'
pattern_2 = r'sheen'
print(re.findall(pattern_1,str))    #['hello', 'hello']
print(re.findall(pattern_2,str))    #['sheen']
2).match

match は文字列の開始位置からの照合を試みます。

  • 開始位置が正常に照合されなかった場合は、None が返されます。

  • 開始位置が正常に一致した場合、オブジェクトが返されます;

import re

str = 'hello sheen,hello cute.'

pattern_1 = r'hello'
pattern_2 = r'sheen'
print(re.match(pattern_1,str))           #<_sre.sre_match>
print(re.match(pattern_1,str).group())   #返回match匹配的字符串内容,hello
print(re.match(pattern_2,str))           #None</_sre.sre_match>
3).search

検索は文字列全体をスキャンし、最初に一致したコンテンツのみを返します;

  • 見つかった場合は、オブジェクトを返し、グループ メソッドを通じて対応する文字列を取得します。

  • ##
import re

str = 'hello sheen,hello cute.'

pattern_1 = r'hello'
pattern_2 = r'sheen'
print(re.search(pattern_1,str))             #<_sre.sre_match>
print(re.search(pattern_1,str).group())     #hello
print(re.search(pattern_2,str))             #<_sre.sre_match>
print(re.search(pattern_2,str).group())     #sheen</_sre.sre_match></_sre.sre_match>

特殊文字クラス

.: \n を除く任意の文字に一致します; [.\n]

\d: digit--(number)、[0-9]
\ に相当する数字と一致します。 D: [^0-9]
\s: スペース (一般化されたスペース: スペース、\t、\n、\r) に相当する非数字文字と一致し、任意の 1 つの空白文字と一致します。
\ S: 単一の空白文字を除く任意の空白文字と一致します;
\w: 英数字またはアンダースコア、[a-zA-Z0-9_]
\W: 英数字またはアンダースコアを除く、[^a-zA- Z0-9_ ]

import re

# .
print(re.findall(r'.','sheen\nstar\n'))     #['s', 'h', 'e', 'e', 'n', 's', 't', 'a', 'r']

#\d#\D
print(re.findall(r'\d','当前声望30'))       #['3', '0']
print(re.findall(r'\D','当前声望30'))       #['当', '前', '声', '望']

#\s#\S
print(re.findall(r'\s', '\n当前\r声望\t为30'))     #['\n', '\r', '\t']
print(re.findall(r'\S', '\n当前\r声望\t为30'))     #['当', '前', '声', '望', '为', '3', '0']

#\w#\W
print(re.findall(r'\w','lucky超可爱!!'))           #['l', 'u', 'c', 'k', 'y', '超', '可', '爱']
print(re.findall(r'\W','lucky超可爱!!'))           #['!', '!']

Python の正規表現の詳細な紹介

文字の出現数を指定してください

一致する文字の出現数:

*: 0 回または無限回出現する前の文字を表します; d*, .*

: 1 回または無限回出現する前の文字を表します; d
?: 1 回出現する前の文字を表しますtime または 0 回; 一部の文字を省略できることを前提として、省略しない場合は

を使用することもできます 2 番目の方法:

{m}: 前の文字が m 回出現します;

{m, }: 前の文字は少なくとも m 回出現します; * == {0,}; ==={1,}
{m,n}: 前の文字は m ~ n 回出現します; ? = == {0 ,1}

import re

#* 代表前一个字符出现0次或者无限次
print(re.findall(r's*','sheenstar'))        #['s', '', '', '', '', 's', '', '', '', '']
print(re.findall(r's*','hello'))            #['', '', '', '', '', '']

#+ 代表前一个字符出现一次或者无限次
print(re.findall(r's+','sheenstar'))        #['s', 's']
print(re.findall(r's+','hello'))            #[]

# ? 代表前一个字符出现1次或者0次
print(re.findall(r'188-?', '188 6543'))     #['188']
print(re.findall(r'188-?', '188-6543'))     #['188-']
print(re.findall(r'188-?', '148-6543'))     #[]


# 匹配电话号码
pattern = r'\d{3}[\s-]?\d{4}[\s-]?\d{4}'
print(re.findall(pattern,'188 0123 4567'))      #['188 0123 4567']
print(re.findall(pattern,'188-0123-4567'))      #['188-0123-4567']
print(re.findall(pattern,'18801234567'))        #['188-0123-4567']

演習 -- IP のマッチング

インターネットから正規表現ジェネレーターを検索し、他の人が作成したルールを使用できます。そして自分でテストしてください。

import re

# | 表示或者
pattern = r'(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)$'

print(re.findall(pattern,'172.25.254.34'))  #[('172', '25', '254', '34')]

matchObj_1 = re.match(pattern,'172.25.254.34')
if matchObj_1:
    print('匹配项:',matchObj_1.group())                     #172.25.254.34
else:
    print('未找到匹配项')

matchObj_2 = re.match(pattern,'172.25.254.343')
if matchObj_2:
    print('匹配项:',matchObj_2.group())                     
else:
    print('未找到匹配项')

Python の正規表現の詳細な紹介

以上がPython の正規表現の詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。