14.正規表現
14.1。概要
14.1.1。概念
- 正規表現
- 試合に1つ以上のテキスト検索文字列を記述したテキストモード、
14.1.2。典型的なシーン
- データ検証
- テキストのスキャニング
- テキスト抽出
- テキスト置換
- テキストセグメンテーション
14.1.3構文
- リテラル
•通常の文字
•エスケープする必要が
•\
•^
•$
•。
•|
•?
•*
•+
•()
•[]
•{}
- メタキャラクタ
14.1.4マッチング
- 単語、事前に定義されたメタ文字
•。の\ nは除くすべての文字
[0-9]へ•\ dはデジタル同等
•[^ 0-9]と同じ\ Dデジタル料、
•\ sの空白文字\トン\ nは\ rを\ F \ V
•\ S非空白文字[^ \トン\ nは\ rを\ F \ V]
英数字ワット•\ [-ZA-Z0-9_]
•\ W英数字以外の文字[^-ZA-Z0-9_]
- バッチオプション
•| NO | YES
- 数量詞(どの文字、メタ文字、文字リピート)
•?0または1
•* 0回以上
•+ 1回以上
• 特定
•{N、M}オーダー範囲
•{n}はn回
•{N}少なくともn回
- 貪欲と非欲張り
•貪欲(デフォルト):結果の最大範囲を一致させよう
•非欲張り
•結果の最小範囲を一致させるようにしてください
•方法:数量詞を追加しましたか?
•例:
•??
•*?
•+?
- ボーダー一致
•^行の始まり
ラインの•$側
•\ bは単語の境界
•\ B非単語境界
•\ Aが入力を開始
•Z入力端\
•注:あり異なっているため、またはパフォーマンスの文脈の違い
14.2。Pythonの定期的な
14.2.1モジュール
- 輸入再
14.2.2。RegexObject定期的なターゲット
- (バイトコードキャッシュにコンパイル)コンパイルのパフォーマンス後のスキーマオブジェクト、正規表現
- コンパイル
•re.compile(R 'モード')
•例1
1つの 輸入再 2 3 #:ケース1 4テキスト= " トムは8歳のマイクは25歳である。。" 5 6 #パッテン= re.compile( '\ D +') 7 #patten.findall(テキスト) 8 9 #同じ機能 10 11 #re.findall( '\ D +'、テキスト)
•例2
1つの 輸入再 2 3 #ケース2: 4つの 5 S = " \\著者:トム" 6パッテン= re.compile(' \\著者' ) 7 patten.findall(単数または複数) 8 9 #出力は、[]は、コード編集する必要があり、以下のように: 10 11 S = " \\著者:トム" 12パッテン= re.compile(' \\\\著者' ) 13 patten.findall(複数可) 14 15 #に出力される[ '\\作者]
- .findall()
•すべての重複しないマッチを探します
•すべての重複しないマッチを探します
•リターンリスト
•例1
#事例3:テキスト=「トムは8歳です。マイクは23歳です。ピーターは87歳です。」パッテン= re.compile(R '\ D +')patten.findall(テキスト)#出力である[ '8'、 '23'、 '87']
•例2
#事例4:テキストは=「トムは8歳です。マイクは23歳です。ピーターは87歳です。」P_NAME = re.compile(R '[AZ] \ W +')p_name.findall(テキスト)#出力である[ 'トム'、 'マイク'、 'ピーター']
- .match(文字列[、POS [、endposの]])
•試合、唯一の開始位置
•リターンマッチオブジェクト
•例1
#ケース5:テキスト= '<HTML> <HEAD> </ HEAD> <BODY> </ BODY> </ HTML>' パターン= re.compile(R '<HTML>')pattern.match(テキスト)#出力<re.Matchオブジェクトです。スパン=(0、6)、一致= '<HTML>'>
•例2:スペースを追加します。
#ケース6:テキスト= '<HTML> <HEAD> </ HEAD> <BODY> </ BODY> </ HTML>' #加了一个空格パターン= re.compile(R '<HTML>')pattern.match (テキスト)#出力は空白です
- .search(文字列[、POS [、endposの]])
•どこでも検索
•リターンマッチオブジェクト
•例:スペースを追加します
#事例7:テキスト= '<HTML> <HEAD> </ HEAD> <BODY> </ BODY> </ HTML>' #加了一个空格パターン= re.compile(R '<HTML>')pattern.search (テキスト)#出力は<re.Matchオブジェクトです。スパン=(1,7)、一致= '<HTML>'>
- .finditer()
•すべての一致を探します
Matchオブジェクトのイテレータを返します。•要素を含みます
•例:あなたは結果のトラバースを行うことができます
#事例8:テキスト=「トムは8歳です。マイクは23歳です。ピーターは87歳です。」P1 = re.compile(R '\ D +')がそれにmに対するp1.finditer(テキスト)=:プリント(M)#出力は、#<re.Matchオブジェクトです。スパン=(7,8)、一致= '8'>#<re.Matchオブジェクト。スパン=(28、30)、一致= '23' >#<re.Matchオブジェクト。スパン=(51、53)、一致= '87' >
14.2.3。するMatchObjectマッチングオブジェクト
- パフォーマンスモードに一致しています
- 。グループ()
0またはnullに•パラメータはマッチ全体を返します。
戻り値は、特定のパケットの詳細を一致させる•参照がある場合
•パラメータは、グループ名を指定できます
- .groups()
•は、すべてのタプルのサブグループを返します。
- .start()は、特定のパケットの開始インデックスを返します。
- .END()は、特定のパケット終了のインデックスを返します
- 実施例1上記の方法
テキストの再インポートが=「トムは8歳です。ジェリーは23歳です。」パターン= re.compile(R '\ D +')pattern.findall(テキスト)#出力は次のとおりです。?[ '8'、 '23'] =パターンre.compile(R '(\ D +)*(\ D +) 「)、M = pattern.search(テキスト)M#出力である:<re.Matchオブジェクト。スパン=(7、31)、一致= '8歳。ジェリーは23' である> m.group()#出力である:「8歳。ジェリーは23' m.group(0)#出力である:「ある8歳。ジェリー23' m.group(1)#出力である: '8' m.group(2)#出力することである '23' m.start(1)#出力は:7 m.end(1)#出力であります:8 m.start(2)#出力がある:29 m.end(2)#出力がある:31 m.groups()#出力は、( '8'、 '23')
- .span()特定のパケットのタプルの開始と終了のインデックスを返します
- .groupdict()ディクショナリ表形式でグループ名と結果を返します。
- 例2
#事例2:輸入再パターン= re.compile(R '(\ワット+)(\ワット+)')テキスト= "美しいが良い醜い超えています。" pattern.findall(テキスト)#出力がある:印刷(m.group([( '美しい'、 'は')、( '良好'、 'よりも')]がpattern.finditerその中mに対する(テキスト)= ))#出力は次のとおりです。#美しいは#よりも良好です
14.3。グループマーシャリング
14.3.1シーン
- マッチングパターンから情報を抽出します
- 場所の数量であるサブアプリケーションを作成します。
•例
re.search再インポート(r'ab + C」、 'ababc')#Outputは<re.Matchオブジェクト。スパン=(2,5)、一致= 'ABC'> re.search(R '(A-B)+ C'、 'ababc')#Outputは<re.Matchオブジェクト。スパン=(0,5)、一致= 'ababc'>
- 選択肢の範囲を制限します
•例
re.search(r'Center |再」、 'センター')#Outputは次のとおりです。<re.Matchオブジェクト。スパン=(0、6)、一致= 'センター'> re.search(r'Center |再」、 'センター')#Outputは次のとおりです。<re.Matchオブジェクト。スパン=(4,6)、一致= '再'> re.search(r'Cent(ER |再)」、 'センター')#Outputである:<re.Matchオブジェクト。スパン=(0、6)、一致= 'センター'> re.search(r'Cent(ER |再)」、 'センター')#Outputは次のとおりです。<re.Matchオブジェクト。スパン=(0、6)、一致= 'センター'>
- 規則的なパターンの抽出における再利用の内容
•例
re.search(R '(\ワット+)+ \ 1'、 'Hello Worldの')#Outputは次のとおりです。ブランクre.search(R '(\ワット+)+ \ 1'、 'ハローハロー世界')#Outputは以下のとおりです。 <re.Matchオブジェクト。スパン=(0、11)、マッチ= 'ハローハロー'>
14.3.2。肯定
- (モード)
- (?P <name>のパターン)
•例
テキスト= "トム:98" パターン= re.compile(R '?(P <名> \ + W):( P <スコア> \ D +)')、M = pattern.search(テキスト)m.group()#出力は次のとおりです。 'トム:98' m.groupは、(1)#Outputがある:「トムm.group( '名前')#Outputがある:「トムm.group( 'スコア')#Outputです:'98 "
14.3.3。参考文献
- オブジェクトのm.group(「名前」)をマッチング
- パターン内(?P =名)
- 実現\ G <名前>
- 文字列操作
14.3.4。アプリケーション
•.split(文字列、maxsplit個= 0)
•スプリット文字列
•例
テキスト=再インポート「美しいは、より良い醜い超えています。\ nExplicitが良く、暗黙的を超えています。\ nSimpleが良く、複雑よりです。」P = re.compile(R「\ n」)p.split(テキスト)#Outputである:#が[「美しいが良い醜いよりも」#「明示的には良好暗黙よりなる。」#「シンプルが良い複雑より。 '] re.split(R' \ W」、 'おはよう')#Outputである:[ '良い'、 '朝'] re.split(R '\ n' は、テキスト、2)#Outputである# [ '美しいが良い醜いよりも' # '明示的に良好暗黙よりも' # 'シンプルが良い複雑よりも'] re.split(R '\ n' は、テキスト、1)#Outputは:#[ 「美しいが良い醜い超えています。」、#「明示が良い暗黙的を超えています。\ nSimpleが良く複雑よりです。」]
•.SUB(REPL、文字列、カウント数= 0)
•置換文字列
•例
ords = 'ORD000 \ nORD001 \ nORD003' re.sub(R '\ D +'、 ' - '、ords)#Outputである: 'ORD- \ nORD- \ nORD-' re.sub(R '([AZ] + )(\ D +) ' '\ G <2> - \ G <1>'、ords)#Outputである: '000-ORD \ N001-ORD \ N003-ORD' テキスト=' 美しい醜いより*優れています。」re.sub(R '\ *(*)\ *。?'、 '</ strong>のの<strong>'、テキスト)#Outputがある: '醜いより</ strong>の美しいの<strong>' re.sub(R、 '<強い> \ G <1> </ strong>の' テキスト '\ *(*)\ *。?')#Outputです:「美しいが、より良い</ strong>のの<strong>です醜い。'
•.subn(REPL、文字列、カウント数= 0)
•交換の数を交換して、リターン
•例
re.subn(R '([AZ] +)(\ D +)'、 '\ G <2> - \ G <1>'、ords)#Outputである:( '000-ORD \ N001-ORD \ n003- ORD」、3)
- コンパイラフラグ
•変更の正規のデフォルトの動作
•re.Iは、ケースを無視します
•例
テキストは= 'PythonのPythonのPythonのre.search(r'python」、テキスト)#Outputは<re.Matchオブジェクト。スパン=(7、13)、一致= 'のpython'> re.findall(r'python 'テキスト)#Outputある:[ 'のpython'] re.findall(r'python'、テキスト、re.I)#出力は次のとおりです。[ 'Pythonの'、 'のpython'、 'PYTHON']
•re.Mは複数行にマッチ
•例
re.findall再インポート(R '^ <HTML>'、 '\ nは、<HTML>')#Outputである:[] re.findall(R '^ <HTML>'、 '\ nは、<HTML>'、再。 M)#Outputです:[ '<HTML>']
•re.Sは、指定された。 "" N \を含め、すべての文字にマッチします
•例
re.findall(R '\ D()'、 '1 \ NE')#Outputである:[] re.findall(R '\ D()'、 '1 \ NE'、re.S)#Outputです:[ '\ n' は]
•... ...
- モジュールレベルの操作
•定期的にキャッシュをクリーンアップするre.purgeは()
•例
re.purge()
•re.escape()エスケープ文字
•例
re.findall(R '^'、 '^パイソン^')#Outputである:[ ''] re.findall(re.escape( '^')、 '^パイソン^')#Outputであります:[ '^' 、 '^']
15. [システムツール]
15.1。コンセプト
15.1.1。コマンドラインツール
15.1.2。シェルスクリプト
15.1.3システム管理
15.2。システムモジュール
15.2.1。SYS
- Pythonランタイムのセットをマッピングするオペレーティングシステムの機能を提供します
- ポータブルインターフェイスクロスプラットフォーム、オペレーティング・システムのプログラミングを提供
- os.pathファイルとディレクトリは、ツールにポータブルプログラミング・インタフェースを提供します
- sys.platform
- ここで、sys.version
- sys.path
- sys.modules
- sys.exc_info()は、最後の例外の詳細を取得します。
15.2.2。インクルード
15.3。SYS
15.3.1。プラットフォームとバージョン
15.3.2。観測例外の詳細
•例
輸入SYS輸入トレースバック試み:除く昇給KeyError例外:プリント(sys.exc_info())#出力は次のとおりです(<クラスのKeyError例外 '>、KeyError例外()、<0x00000200332E6808でトレースバックオブジェクト>)
- traceback.print_tb(sys.exc_info()[2])
•例
traceback.print_tb(sys.exc_info()[2])#出力がある:ファイル "<ipython-入力70-1bc1bfcd4795>"、5行目で<モジュール>上げKeyError例外
15.3.3。コマンドラインパラメータ
- sys.argvの
- 標準入力ストリームをsys.stdinをすると、デフォルトの入力に相当します()
- デフォルトの印刷にsys.stdoutの標準出力ストリームに相当()
- 標準エラーストリームsys.stderrを持ち
- os.environ
- .getcwdは()現在の作業ディレクトリを取得します。
- .listdir(パス)リストディレクトリの内容
- 作業ディレクトリを変更する.chdir(パス)
- 現在のプロセスIDを取得)(.getpid
- 現在の親プロセスIDを取得)(.getppid
- .system()のPythonスクリプトは、シェルコマンドを実行します
- .popen()コマンドおよび入力を実行し、出力ストリームが接続されています。
- ディレクトリを作成する.mkdir(「ディレクトリ名」)
- ディレクトリを削除する.rmdir(「ディレクトリ名」)
- .rename('旧名','新名') 改名
- .remove(「filename」)は、ファイルを削除します
- セパレータ.sep
- .pathsepパス区切り
- .curdirカレントディレクトリのシンボルに対する相対
- .pardir親ディレクトリ記号に対する相対
- .isdir(パス)ディレクトリか
- .isfile(パス)ファイルのこと
- .exists(パス)がある場合
- .split(パス)分割経路
- .splitext(パス)スプリットパス拡張
- .join()接続経路
- .normpath()正規化されたパス
- .abspath()絶対パス