正規表現
定義:
正規表現は、文字で構成される論理式の文字列操作は、特定の文字の組み合わせによって事前に定義されており、これらの特定の文字、「ルール文字列」、「ルール文字列は」文字列を表現するために使用されていますフィルタリングロジック。
それは独立したルールで、言語に依存しません。文字列でのみ扱います。
私たちにできることは何か?
例 1 :見つけるためにあるすべての携帯電話番号にファイルを置きます。
#開くファイルを開きます
#読むファイルSTR
#の長いリストからすべての文字列検索11 桁の数字を
#Aは文字で文字を読みます
例 2 :爬虫類、文字列のWebページから必要なデータを取得します
例 3 :特定のコンテンツログを抽出します
ルール
文字グループ:
[] 括弧の内容で書かれ、彼らは上のルールに沿ったものである文字を、次の特定の位置に表示されます
[0-9] マッチ番号
[AZ]は 小文字と一致します
[AZ]は 大文字と一致します
[4-9] と一致する。4 に図9 の図面を
[-ZA-Z] マッチ小文字
[a-zA-Z0-9]は小文字に一致+ 数字
[-ZA-Z0-9_] マッチラインの英数字下落
エスケープ + メタキャラクタを
\ wは マッチライン英数字辞退ワードキーワード[-ZA-Z0-9_]を
\ dは 任意の数値と一致する 数字[0-9]
\ Sは 空白キャリッジリターン一致/ ラインフィードタブスペースの スペース[\ n個の\ t]を
\ W \ D \ S および\ \ D \ S W 否定
\ bは単語の境界を表し、
[\ S \ S] [\ D \ D] [\ W \ W] 3つのコーパスは意味のすべての文字にマッチします
そして、文字はエスケープに関連する メタ文字
W \ \ D \ S(\ n個の\ T)\ bは\のW \ D \ S
メタキャラクタ
^ 文字列の先頭にマッチします
$は文字列の末尾にマッチします
。一致を示し改行以外の以外のすべての文字を
[] 限りブラケットがコンテンツに表示されるように適合させることができます
[^] 限り括弧内のないコンテンツについて一致することができないように
| B または遵守規則またはBのルールを一致させることができます
#場合はルールがあるのb 規則の一部、およびよりルールB 過酷にルール/ 長さ、置くルールEDITORIALを
#もっと複雑な\ 一番上に書かれた長いルール
()時間の制約の数量のニーズを表現するために一緒にいくつかの文字をグループ化する、同じグループにこれらの数量詞を与えます
数量詞
{N}は、数量詞の文字が前に表示さ表すN 倍
{N} 前の数量詞の文字を表す少なくとも出現のn 倍
{N、M}は、前の文字が表示される数量詞示すNM 回
?は文字が表示される前に、数量を表します0 回または1 回は不要表明します
+ 文字が数量詞の前に現れる表し1 回以上
* 数量が表示される前の文字を表します0 回以上
演習:
マッチ整数 \ D +
マッチ小数 \ D + \。\ D +
10進数または整数をマッチング \ dは+ \ \ D + | 。\ D + \ D +(\ \ D +。)?
一致するID番号(検証ルールの脇考察):
[1-9] \ D {14}(\ dの{2} [\のdX])?
[1-9] \ D {16} [\のdX] | [1-9] \ dの{14}
グリードマッチ
許容の範囲内で最長の結果を取ります
非貪欲パターン / 不活性マッチ:バック数量詞のプラスで?
。*?xが 、それは任意の長さに出会うまで、あらゆる非改行文字にマッチするのx 停止を
文字 + 数量詞制約の連続した文字の数
文字 + 数量詞+? 制約連続した文字の最小数
文字 + 数量詞+?+ X 連続数量の範囲内の文字の制約の最小数は、満たさxは直ちに停止します
これらは、正規表現の独自のルール、そしてあるパイソン無毛の関係
再モジュール
findAll:全てのリストでそれぞれが一致する要素
検索:だけ右へ第1の左に一致する、直接的な結果は得られないが、しかし、変数、この変数を介して基は方法の結果を得るために
一致しない場合、それは戻らないだろう、どれを使用してグループを文句を言うだろう
手順は、一般的に次のように使用されています。
マッチ:スクラッチ試合、と同等の検索正規表現の追加します^
拡張文字列処理:カッティング置き換えます
スプリット
サブ 古い新しい交換番号
SUBNはタプルを返し、第2の要素は、置換の数であります
コンパイルモジュールは、時間を節約できます
直接正規表現への複数使用の過程では、バイトコードにコンパイルされ、複数のないコンパイル
finditer 問題解決するために正規表現を使用して、スペースを節約/ メモリ
パケット
グループ()は、全体的なマッチングの内容を示し、グループ(NUM)は、第1一致表す NUMパケットを
インポートの再
S = "ハッピー毎日の<a> </a>の"
RES = re.search('(<\ W +>)([\ W \ Wである] +)(</ \ W +>')、S)
を印刷(res.group()) #すべての結果の
印刷(res.group(1))# は、パケット番号の数を表し
プリント(res.group(2))
プリント(res.group(3))
輸出
findAllの優先順位
= re.findall RET(| 'WWW(Baiduの。siNAの).COM' 、'www.sina.com' )
印刷(RET) [ 'siNAの']#1のfindAllは、グループの試合の内容を返すように優先順位を与えるためであり、あなたは結果を一致させたい場合は、キャンセルする権限 = re.findall(RET |: '?。siNAの).COM BaiduのWWW('、'www.sina.com' )印刷(RET) #1 [「www.sina.comを「]