注: この記事は Python2.4 に基づいています。理解できない用語がある場合は、Baidu、Google、Wiki などを思い出してください。
1. 正規表現の基本
1.1. 簡単な紹介
正規表現は Python の一部ではありません。正規表現は、文字列を処理するための強力なツールです。独自の構文と独立した処理エンジンを備えています。str 独自のメソッドほど効率的ではないかもしれませんが、非常に強力です。このおかげで、正規表現の構文は、正規表現を提供する言語で同じになります。唯一の違いは、異なるプログラミング言語の実装によってサポートされる構文の数が異なることです。ただし、サポートされていない構文は通常は一部です。それは一般的には使用されません。すでに他の言語で正規表現を使用している場合は、ざっと確認するだけで使い始めることができます。
次の図は、正規表現を使用した照合プロセスを示しています。
正規表現の大まかな照合プロセスは次のとおりです。 式とテキストを順に取り出し、比較します。すべての文字が一致する場合、一致は成功します。一致しない文字がある場合、一致は失敗します。式に量指定子や境界がある場合、プロセスは若干異なりますが、以下の図の例を見て、自分で何度か使用すると、簡単に理解できるようになります。
次の図は、Python でサポートされている正規表現のメタ文字と構文を示しています:
1.2 量指定子の貪欲モード-greedy pattern
正規表現は、テキスト内の一致する文字列を検索するためによく使用されます。 Python の量指定子はデフォルトで貪欲であり (一部の言語ではデフォルトで非貪欲)、常にできるだけ多くの非貪欲な文字と一致しようとします。逆に、常にできるだけ少ない文字と一致しようとします。たとえば、「abbbc」を検索するために正規表現「ab*」を使用すると、「abbb」が検索されます。また、貪欲でない量指定子「ab*?」を使用すると、「a」が見つかります。
1.3. バックスラッシュの問題
ほとんどのプログラミング言語と同様に、「"」は正規表現のエスケープ文字として使用され、バックスラッシュの問題を引き起こす可能性があります。テキスト内の文字「」と一致する必要がある場合、プログラミング言語で表現される正規表現には 4 つのバックスラッシュ「\\」が必要です。最初の 2 つと最後の 2 つは、プログラミング言語でバックスラッシュにエスケープするために使用され、変換されます。正規表現では 2 つのバックスラッシュに変換され、その後 1 つのバックスラッシュにエスケープされます。 Python のネイティブ文字列は、この問題を非常にうまく解決します。この例の正規表現は r"\" で表すことができます。同様に、数値に一致する「\d」は r"d" と書くことができます。ネイティブ文字列を使用すると、バックスラッシュの欠落を心配する必要がなくなり、作成する式がより直感的になります。
1.4. マッチング パターン
正規表現では、大文字と小文字の区別や複数行のマッチングなど、利用可能なマッチング パターンが提供されます。この部分は、パターンクラス(pattern[, flags])もまとめて紹介します。
2. re モジュール
2.1. re の使用を開始する
Python は re モジュールを通じて正規表現をサポートします。 re を使用するための一般的な手順は、まず正規表現の文字列形式を Pattern インスタンスにコンパイルし、次に Pattern インスタンスを使用してテキストを処理し、一致結果 (Match インスタンス) を取得し、最後に Match インスタンスを使用して情報を取得し、その他の操作を実行します。
# エンコーディング: UTF-8
import re
#正規表現の変換 式を Pattern オブジェクトにコンパイルします。
pattern = re.compile(r'hello')
# Pattern を使用してテキストを照合し、一致しない場合は None が返されます match = pattern.match('hello world !')
if match:
# Match を使用してグループ情報を取得します
print match.group()
### 出力 ###
#こんにちは
re.compile(strPattern[, flag]):
このメソッドは、Pattern クラスのファクトリ メソッドであり、文字列形式の正規表現を Pattern オブジェクトにコンパイルするために使用されます。 2 番目のパラメーター フラグは、ビットごとの OR 演算子 '|' を使用して、同時に有効であることを示します (re.I | re.M)。さらに、正規表現文字列でパターンを指定することもできます。たとえば、re.compile('pattern', re.I | re.M) は re.compile('(?im)pattern') と同等です。
オプションの値は次のとおりです:
re.I(re.IGNORECASE): 大文字と小文字を無視します (完全な記述は括弧内にあります。以下同様)
M(MULTILINE): 複数行モード、変更 '^ ' と '$' の動作 (上の図を参照)
S(DOTALL): 一致するパターンをクリックして '.' の動作を変更します
L(LOCALE): 所定の文字クラスを作成します w W b B s S は現在のロケールに依存します
U(UNICODE): 所定の文字クラスを w W b B s S d D を Unicode で定義された文字属性に依存させます
X(VERBOSE): 冗長モード。このモードでは、正規表現を複数行にすることができ、空白文字は無視され、コメントを追加できます。次の 2 つの正規表現は同等です:
a = re.compile(r """d + # 整数部
. # 小数点
d * # 一部の小数点""", re.X)
b = re.compile(r"d+.d *" )
は、正規表現関数を完成させるための多数のモジュール メソッドを提供します。これらのメソッドは、Pattern インスタンスの対応するメソッドで置き換えることができます。唯一の利点は、記述される re.compile() コードが 1 行少なくなることですが、同時にコンパイルされた Pattern オブジェクトを再利用することはできません。これらのメソッドは、Pattern クラスのインスタンス メソッド セクションでまとめて紹介されます。たとえば、上記の例は次のように省略できます:
m = re。 match(r'hello' , 'hello world!')
print m.group()
re モジュールは、次のような文字列内の正規表現メタ文字用のメソッド escape(string) も提供します。 * /+/? の前にエスケープ文字を追加してから戻ります。これは、多数のメタ文字を一致させる必要がある場合に便利です。
2.2. Match
Match オブジェクトは一致の結果であり、Match が提供する読み取り可能なプロパティまたはメソッドを使用してこの情報を取得できます。
属性:
文字列: マッチング時に使用されるテキスト。
re: マッチングに使用されるパターン オブジェクト。
pos: 正規表現検索が開始されるテキスト内のインデックス。この値は、Pattern.match() メソッドおよび Pattern.seach() メソッドの同名のパラメータと同じです。
endpos: 正規表現検索が終了するテキスト内のインデックス。この値は、Pattern.match() メソッドおよび Pattern.seach() メソッドの同名のパラメータと同じです。
lastindex: テキスト内で最後にキャプチャされたグループのインデックス。パケットがキャプチャされなかった場合は None になります。
lastgroup: 最後にキャプチャされたグループのエイリアス。このグループにエイリアスがない場合、またはキャプチャされたグループがない場合は、None になります。
メソッド:
group([group1, …]):
1 つ以上のグループによってインターセプトされた文字列を取得します。複数のパラメーターが指定された場合は、タプルの形式で返されます。 group1 は数値またはエイリアスを使用できます。数値 0 は一致した部分文字列全体を表します。パラメータが入力されていない場合は、group(0) が返されます。回は、最後にインターセプトされた部分文字列を返します。
groups([default]):
すべてのグループのインターセプト文字列をタプルの形式で返します。 group(1,2,…last) を呼び出すことと同等です。デフォルトは、文字列をインターセプトしないグループがこの値に置き換えられることを意味し、デフォルトは None です。
groupdict([default]):
エイリアスのグループのエイリアスをキーとして、グループによってインターセプトされた部分文字列を値として持つ辞書を返します。エイリアスのないグループは含まれません。デフォルトの意味は上記と同じです。
start([group]):
指定されたグループによってインターセプトされた部分文字列の文字列内の開始インデックス (部分文字列の最初の文字のインデックス) を返します。グループのデフォルト値は 0 です。
end([group]):
文字列内の指定されたグループによってインターセプトされた部分文字列の終了インデックス (部分文字列の最後の文字のインデックス + 1) を返します。グループのデフォルト値は 0 です。
span([グループ]):
戻り値 (開始(グループ)、終了(グループ))。
expand(template):
一致したグループをテンプレートに入れて戻ります。 id または g
import re
m = re.match(r'(w+) (w+)(?P
print "m.string :", m.string
print "m.re:", m.re
print "m.pos:", m.pos
print "m.endpos:", m.endpos
print "m.lastindex:", m.lastindex
print "m.lastgroup:", m.lastgroup
print "m.group(1,2):", m.group(1, 2)
print "m.groups():", m.groups()
print "m.groupdict():", m.groupdict()
print "m.start(2):", m.start(2)
print "m.end(2):", m.end(2)
print "m.span(2):", m.span(2)
print r"m.expand(r'2 13'):", m.expand(r'2 13')
### 出力 ###
# m.string: hello world!
# m.re:
# m.pos: 0
# m.endpos: 12
# m.lastindex: 3
# m.lastgroup: 符号
# m.group(1,2): ( 'hello', 'world')
# m.groups(): ('hello', 'world', '!')
# m.groupdict(): {'sign': '!'}
# m.start(2): 6
# m.end(2): 11
# m.span(2): (6, 11)
# m.expand(r' 2 13'): ワールドハロー!
2.3.パターン
パターン オブジェクトは、パターンが提供する一連の方法によってテキストの適合を実行できる、適切な表現形式です。 >パターンは、表現式を取得するために使用される、次の関連情報を提供します。
パターン: 評価時に使用される表現形式の文字列。
フラグ: 評価時に使用される適合モード。
groupindex: 表式内に名前が含まれるグループの名前はセキュリティであり、そのグループに対応する番号は値の文字典であり、そのグループには名前は含まれません。
复制代码
print "p.flags:", p.flags
print "p.groups: ", p.groups
print "p.groupindex:", p.groupindex
### Output ###
# p.pattern: (w+) (w+)(?P
# p.flags: 16
# p.groups: 3
# p.groupindex: {'sign': 3}
实例方法[ | re模块方法]:
1、match(string[, pos[, endpos]]) | re.match(pattern, string[, flags]): このメソッドは、文字列の位置の下にあるパターンを呼び出します。一致パターンが完了した場合、一致可能です。一致オブジェクトが返されます。一致途中のパターンであれば、
pos と endpos の指定値はそれぞれ 0 と len(string) です。re.match() はこの 2 つのパラメータを指定できません。パラメータflags は、 注意: この方法は完全な一致ではありません。パターンの終了時に文字列に残りの文字があれば成功とみなされます。
2.1 の例を参照してください。
2、search(string[, pos[, endpos]]) | re.search(pattern, string[, flags]):
このメソッドは、文字列内で一致する可能性がある子列を検索するために使用されます。パターンの終了時に一致する場合、文字列の pos の下から一致パターンを開始します。
pos と endpos の値は、それぞれ 0 と len(string) です。
pos と endpos の値は、それぞれ 0 と len(string) です。 );re.search() はこの 2 つのパラメータを無法で指定し、パラメータフラグはパターンの一致モードを指定するために使用されます。 >
# エンコーディング: UTF-8
import re
print match.group()
### 出力 ###
# world
3、split(文字列[, maxsplit]) | re.split(pattern, string[, maxsplit]):
一致する子列を文字列分割した後、列表を返します。maxsplit は最大分割次数を指定するために使用され、全体分割は指定されません。 🎜>
复制代码
代码如下:
import re p = re.compile(r'd+')
print p.split(' one1two2three3four4')
### 出力 ###
# ['one', 'two', 'three', 'four', '']
p = re.compile(r'd+')
print p.findall('one1two2three3four4')
### 出力 ###
# ['1', '2', '3', '4']
5. finditer(string[, pos[, endpos]]) | re.finditer(pattern, string[, flags]):
文字列を検索し、一致する各結果への順次アクセスを返します (Match オブジェクト)イテレータ。
import re
p = re.compile(r'd+' )
for m in p.finditer('one1two2three3four4'):
print m.group(),
### 出力 ###
# 1 2 3 4
6. sub(repl, string[, count]) | re.sub(pattern, repl, string[, count]):
repl を使用して、string 内の一致する各部分文字列を置換し、置換された文字列を返します。
repl が文字列の場合、id または g
repl がメソッドの場合、このメソッドは 1 つのパラメータ (Match オブジェクト) のみを受け取り、置換用の文字列を返す必要があります (返された文字列でグループを参照することはできません)。
count は置換の最大数を指定するために使用されます。指定しない場合は、すべての置換が行われます。
import re
p = re.compile(r'(w+ ) (w+ )')
s = 'こんにちは、世界!'
print p.sub(r'2 1', s)
def func(m):
return m. group(1 ).title() + ' ' + m.group(2).title()
print p.sub(func, s)
### 出力 ###
# Say i 、ワールドハロー!
# こんにちは、ワールド!
7. subn(repl, string[, count]) |re.sub(pattern, repl, string[, count]) :
Return (sub(repl, string[, count]), 置換数)。
import re
p = re.compile(r'(w+ ) (w+ )')
s = 'こんにちは、世界!'
print p.subn(r'2 1', s)
def func(m):
return m. group(1 ).title() + ' ' + m.group(2).title()
print p.subn(func, s)
### 出力 ###
# (' Say i, world hello!', 2)
# ('I Say, Hello World!', 2)
上記は Python の正規表現のサポートです。正規表現に習熟することは、すべてのプログラマーが備えなければならないスキルです。現在、文字列を扱わないプログラムはありません。筆者もまだまだ初期段階ですが、頑張ってください^_^
なお、図には特殊な構造の例が無く、これらの正規表現の使い方が難しいです。興味があれば、abc で始まらない単語を一致させる方法を考えてみてください ^_^
全文終わり

Pythonは、データサイエンス、Web開発、自動化タスクに適していますが、Cはシステムプログラミング、ゲーム開発、組み込みシステムに適しています。 Pythonは、そのシンプルさと強力なエコシステムで知られていますが、Cは高性能および基礎となる制御機能で知られています。

2時間以内にPythonの基本的なプログラミングの概念とスキルを学ぶことができます。 1.変数とデータ型、2。マスターコントロールフロー(条件付きステートメントとループ)、3。機能の定義と使用を理解する4。

Pythonは、Web開発、データサイエンス、機械学習、自動化、スクリプトの分野で広く使用されています。 1)Web開発では、DjangoおよびFlask Frameworksが開発プロセスを簡素化します。 2)データサイエンスと機械学習の分野では、Numpy、Pandas、Scikit-Learn、Tensorflowライブラリが強力なサポートを提供します。 3)自動化とスクリプトの観点から、Pythonは自動テストやシステム管理などのタスクに適しています。

2時間以内にPythonの基本を学ぶことができます。 1。変数とデータ型を学習します。2。ステートメントやループの場合などのマスター制御構造、3。関数の定義と使用を理解します。これらは、簡単なPythonプログラムの作成を開始するのに役立ちます。

10時間以内にコンピューター初心者プログラミングの基本を教える方法は?コンピューター初心者にプログラミングの知識を教えるのに10時間しかない場合、何を教えることを選びますか...

fiddlereveryversings for the-middleの測定値を使用するときに検出されないようにする方法

Python 3.6のピクルスファイルのロードレポートエラー:modulenotFounderror:nomodulenamed ...

風光明媚なスポットコメント分析におけるJieba Wordセグメンテーションの問題を解決する方法は?風光明媚なスポットコメントと分析を行っているとき、私たちはしばしばJieba Wordセグメンテーションツールを使用してテキストを処理します...


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SublimeText3 中国語版
中国語版、とても使いやすい

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません
