Python入門の内蔵モジュール--reモジュール

6694 ワード

Python入門の内蔵モジュール--reモジュール
1、reモジュール
(1)正則とは?
正規表現とは、特殊な意味を持つ記号を組み合わせて文字や文字列を記述する方法です.あるいは、正規表現とは、物事を記述するためのルールです.(Pythonでは)Pythonに内蔵され、reモジュールによって実現される.正規表現モードは一連のバイトコードにコンパイルされ、Cで記述されたマッチングエンジンによって実行される.
メタ文字
コンテンツの照合
\w
一致する文字(中国語を含む)または数値または下線
\W
非アルファベット(中国語を含む)または数値または下線を一致させる
\s
任意の空白文字に一致
\S
空白以外の文字の一致
\d
一致する数値
\D
非数値の一致
\A
文字列の先頭から一致
\z
文字列の最後に一致し、改行の場合は改行前の結果にのみ一致します.
改行の一致
\t
タブの一致
^
一致文字列の開始
$
一致する文字列の末尾
.
改行を除く任意の文字を一致させ、re.DOTALLタグが指定されている場合は、改行文字を含む任意の文字を一致させることができます.
[...]
文字グループに一致する文字
...
文字グループ内の文字を除くすべての文字を一致させる
*
0文字以上の左の文字を一致させます.
+
1つ以上の左の文字に一致します.
?
0文字または1文字の左の文字に一致し、欲張りではありません.
{n}
n個の前の式を正確に一致させる.
{n,m}
nからm回の前の正規表現で定義されたセグメントをマッチングし、貪欲な方法
ab
マッチングaまたはb
()
かっこ内の式と一致し、グループも表します.
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
import  re 

<1>wアルファベット、数字、下線、中国語
print(re.findall("\w","  -Marry_dsb123   D  "))   # \w   .  .   .   

<2>Wはアルファベット、数字、下線、中国語ではありません
print(re.findall("\W","  -Marry_dsb123   D  "))   # \w     .  .   .   

<3>d一致数
print(re.findall("\d"," 10⑩"))                       #  \d        

<4>D非数値照合
print(re.findall("\D"," 10⑩"))                       # \D      

<5>A文字列の先頭から一致する先頭でよく使われる^a
print(re.findall("\Aa","asfdasdfasdfalex"))
print(re.findall("^a","alex"))                        #        

<6>Z文字列の末尾から一致し、どの末尾でよく使われるか$
print(re.findall("d\Z","asfdasdfasdfalex"))
print(re.findall("x$","alex"))                        #         

<7>改行の一致
print(re.findall("
","alex
wusir"))

<8>tマッチングテーブル
print(re.findall("\t","alex\twusir"))

<9>文字列が対応する文字列に一致
print(re.findall("alex","alex\twusiralex"))

<10> [...] 文字グループに一致する文字
print(re.findall('[0-9]',"  -Marry_dsb123   D  "))                 
print(re.findall('[a-z]',"  -Marry_dsb123   D  "))
print(re.findall('[A-Z]',"  -Marry_dsb123   D  "))

<11>^[]非文字グループの文字を一致させる
print(re.findall("[^0-9a-z]","123alex456"))  

<12>*0文字以上の左文字を貪欲にマッチング
print(re.findall("a*","marry,aa,aaaa,bbbbaaa,aaabbbaaa"))    #   *     0          

<13>+1つ以上の左の文字を貪欲にマッチング
print(re.findall("a+","alex,aa,aaaa,bbbbaaa,aaabbbaaa"))                     

<14> ?0文字または1文字の左に一致する文字は欲張りではありません.
print(re.findall("a?","alex,aa,aaaa,bbbbaaa,aaabbbaaa"))  #   ?   0  1       

<15>{n}左のn個の前の式に正確に一致する
print(re.findall("[0-9]{11}","18612239999,18612239998,136133333323")) #           

<16>{n,m}は、nからm回前の正規表現で定義されたセグメントに一致する
print(re.findall("a{3,8}","alex,aaaabbbaaaaabbbbbbaaa,aaaaaaaaabb,ccccddddaaaaaaaa")) 

<17>a|bマッチングaまたはb
print(re.findall("a|b","alexdsb"))

<18>()カッコ内の式に一致し、グループを表す
print(re.findall("(.+)","alex wusir"))     #    
print(re.findall("(.+?)","alex wusir"))   #       

<19> . 定義reとして改行を除く任意の文字を一致させる.DOTALLの場合、改行文字にマッチします
print(re.findall("a.c","abc,aec,a
c,a,c")) # (
)
print(re.findall("a.c","abc,aec,a
c,a,c",re.DOTALL))

<20>  . 任意の機能はありません
print(re.findall("-\d+\.\d+|-[0-9]|\d+",s))

<21>s一致スペース
print(re.findall("\s","alex\tdsbrimocjb"))            # \s     

<22>S非スペースマッチ
print(re.findall("\S","alex\tdsbrimocjb"))            # \s      

試験問題:
      :'alex_sb ale123_sb wu12sir_sb wusir_sb ritian_sb'   alex wusir '     _sb   

答え:
s = 'alex_sb ale123_sb wu12sir_sb wusir_sb ritian_sb'print(re.findall("(.+?)_sb",s))

-------------------------------------------------------------------------------------------------------------
(1)findallがすべて見つかった場合はリストを返す
print(re.findall("alex","alexdsb,alex_sb,alexnb,al_ex"))

(2)searchは文字列内の任意の位置からマッチングして1つを検索すると停止し,1つのオブジェクトを返す.マッチングを取得する内容は.group()を用いて取得しなければならない.
print(re.search("a.+","lexaaaa,bssssaaaasa,saaasaasa").group())

(3)match文字列の開始位置からマッチング
print(re.match("a.+","alexalexaaa,bssssaaaasa,saaasaasa").group())

試験問題
searchとmatchの違い
search任意の場所から検索
matchは最初から検索して、合わなければ検索を続けません
グループ()で表示
(4)split--分割するには[]
print(re.split("[:;,.!#]","alex:dsb#wusir.djb"))

(5)sub--置換
s = "alex:dsb#wusir.djb"
print(re.sub("d","e",s,count=1))

(6)complie--照合ルールの定義
s = re.compile("\w")
print(s.findall("alex:dsb#wusir.djb"))

(7)finditter--反復器を返します
s = re.finditer("\w","alex:dsb#wusir.djb")   #           
print(next(s).group())
print(next(s).group())
for i in s:
    print(i.group())

(8)search--グループに名前を付ける?P
ret = re.search("\w+)>\w+\w+>","

hello

") ret = re.search("\w+)>(?P\w+)\w+>","

hello

") print(ret.group("tag_name")) print(ret.group("content"))