検索
ホームページバックエンド開発Python チュートリアルPythonモジュールの再正規表現の詳細な紹介

1. 簡単な紹介

正規表現は、小さくて高度に専門化されたプログラミング言語であり、多くのプログラミング言語の基本的かつ重要な部分です。 Python では主に re モジュールを通じて実装されます。 正規表現パターンは一連のバイトコードにコンパイルされ、C で書かれたマッチング エンジンによって実行されます。では、正規表現の一般的な使用シナリオは何でしょうか?

たとえば、一致させたい対応する

文字列

セットのルールを指定します。文字列セットには、電子メール アドレス、インターネット アドレス、電話番号、または必要に応じてカスタマイズされた文字列セットを含めることができます。

もちろん、文字列セットが定義した一致ルールに準拠しているかどうかを判断することもできます

変更、切り取り、その他のテキスト処理を行う

2 . 特殊な記号と文字 (

メタキャラクター

)

ここでは、正規表現に強力な機能と柔軟性を与える一般的なメタキャラクターをいくつか示します。表 2-1 に、より一般的な記号と文字を示します。

3. 正規表現

1. 正規表現をコンパイルするには、compile()

関数 Pythonモジュールの再正規表現の詳細な紹介 を使用します

Python コードは最終的にバイトコードに変換され、インタープリターで実行されます。したがって、コードでよく使用される正規表現を事前にコンパイルしておくと便利です。

re モジュール内のほとんどの関数は、コンパイルされた 正規表現オブジェクト および正規一致オブジェクトのメソッドと同じ名前を持ち、同じ機能を持ちます。

例:

>>> import re
>>> r1 = r'bugs'                            # 字符串前加"r"反斜杠就不会被任何特殊方式处理,这是个习惯,虽然这里没用到
>>> re.findall(r1, 'bugsbunny')             # 直接利用re模块进行解释性地匹配
['bugs']                         
>>>
>>> r2 = re.compile(r1)                     # 如果r1这个匹配规则你会经常用到,为了提高效率,那就进行预编译吧
>>> r2                                      # 编译后的正则对象
<_sre.SRE_Pattern object at 0x7f5d7db99bb0>
>>>
>>> r2.findall(&#39;bugsbunny&#39;)                 # 访问对象的findall方法得到的匹配结果与上面是一致的
[&#39;bugs&#39;]                                    # 所以说,re模块中的大多数函数和已经编译的正则表达式对象和正则匹配对象的方法同名并且具有相同的功能

re.compile() 関数は、オプションのフラグ パラメーターも受け入れます。これらは、さまざまな特別な関数や構文の変更を実装するために一般的に使用されます。これらのフラグは、ほとんどの re モジュール関数の引数としても使用できます。これらのフラグは、演算子(|)を使用して組み合わせることができます。

例:

>>> import re
>>> r1 = r&#39;bugs&#39;
>>> r2 = re.compile(r1,re.I)  # 这里选择的是忽略大小写的标志,完整的是re.IGNORECASE,这里简写re.I
>>> r2.findall(&#39;BugsBunny&#39;)
[&#39;Bugs&#39;]
 
# re.S 使.匹配换行符在内的所有字符
# re.M 多行匹配,英雄^和$
# re,X 用来使正则匹配模式组织得更加清晰

フラグパラメータと使用法の完全なリストについては、関連する公式ドキュメントを参照してください。

2. 正規表現を使用する

re モジュールは、正規表現エンジンの

インターフェース

を提供します。ここでは、一般的に使用される関数とメソッドをいくつか紹介します。

Match オブジェクトと group() および groups() メソッド

正規表現を扱う場合、正規表現オブジェクトに加えて、もう 1 つのオブジェクト タイプ、match オブジェクトがあります。これらは、match() または search() の呼び出しが成功した場合に返されるオブジェクトです。 Match オブジェクトには、group() と groups() という 2 つの主要なメソッドがあります。 group() は、リクエストに応じて一致オブジェクト全体または特定のサブグループを返します。 groups() は単にサブグループのみまたはすべてを含むタプルを返します。サブグループ化が必要ない場合、group() は一致全体を返しますが、groups は空のタプルを返します。以下のいくつかの関数例は、この方法を示しています。

文字列を一致させるには match() メソッドを使用します

match() 関数は文字列の先頭からパターンを一致させます。一致が成功した場合は一致オブジェクトが返され、一致が失敗した場合は None が返され、一致オブジェクトの group() メソッドを使用して成功した一致を表示できます。

例は次のとおりです:

>>> m = re.match(&#39;bugs&#39;, &#39;bugsbunny&#39;)     # 模式匹配字符串
>>> if m is not None:                     # 如果匹配成功,就输出匹配内容
...     m.group()
...
&#39;bugs&#39;
>>> m
<_sre.SRE_Match object at 0x7f5d7da1f168> # 确认返回的匹配对象

search() を使用して文字列内のパターンを検索します

search()的工作方式与match()完全一致,不同之处在于search()是对给定正则表达式模式搜索第一次出现的匹配情况。简单来说,就是在任意位置符合都能匹配成功,不仅仅是字符串的起始部分,这就是与match()函数的区别,用脚指头想想search()方法使用的范围更多更广。

示例:

>>> m = re.search(&#39;bugs&#39;, &#39;hello bugsbunny&#39;)
>>> if m is not None:
...     m.group()
...
&#39;bugs&#39;

 使用findall()和finditer()查找每一次出现的位置

findall()是用来查找字符串中所有(非重复)出现的正则表达式模式,并返回一个匹配列表;finditer()与findall()不同的地方是返回一个迭代器,对于每一次匹配,迭代器都返回一个匹配对象。

>>> m = re.findall(&#39;bugs&#39;, &#39;bugsbunnybugs&#39;)
>>> m
[&#39;bugs&#39;, &#39;bugs&#39;]
>>> m = re.finditer(&#39;bugs&#39;, &#39;bugsbunnybugs&#39;)
>>> m.next()                                   # 迭代器用next()方法返回一个匹配对象
<_sre.SRE_Match object at 0x7f5d7da71a58>      # 匹配用group()方法显示出来
>>> m.next().group()
&#39;bugs&#39;

 使用sub()和subn()搜索与替换

都是将某字符串中所有匹配正则表达式的部分进行某种形式的替换。sub()返回一个用来替换的字符串,可以定义替换次数,默认替换所有出现的位置。subn()和sub()一样,但subn()还返回一个表示替换的总是,替换后的字符串和表示替换总数一起作为一个拥有两个元素的元组返回。

示例:

>>> r = &#39;a.b&#39;
>>> m = &#39;acb abc aab aac&#39;
>>> re.sub(r,&#39;hello&#39;,m)
&#39;hello abc hello aac&#39;
>>> re.subn(r,&#39;hello&#39;,m)
(&#39;hello abc hello aac&#39;, 2)

字符串也有一个replace()方法,当遇到一些模糊搜索替换的时候,就需要更为灵活的sub()方法了。

使用split()分割字符串

同样的,字符串中也有split(),但它也不能处理正则表达式匹配的分割。在re模块中,分居正则表达式的模式分隔符,split函数将字符串分割为列表,然后返回成功匹配的列表。

示例:

>>> s = &#39;1+2-3*4&#39;
>>> re.split(r&#39;[\+\-\*]&#39;,s)
[&#39;1&#39;, &#39;2&#39;, &#39;3&#39;, &#39;4&#39;]

分组

有时在匹配的时候我们只想提取一些想要的信息或者对提取的信息作一个分类,这时就需要对正则匹配模式进行分组,只需要加上()即可。

示例:

>>> m = re.match(&#39;(\w{3})-(\d{3})&#39;,&#39;abc-123&#39;)
>>> m.group()       # 完整匹配                        
&#39;abc-123&#39;
>>> m.group(1)      # 子组1
&#39;abc&#39;
>>> m.group(2)      # 子组2
&#39;123&#39;
>>> m.groups()      # 全部子组
(&#39;abc&#39;, &#39;123&#39;)

由以上的例子可以看出,group()通常用于以普通方式显示所有的匹配部分,但也能用于获取各个匹配的子组。可以使用groups()方法来获取一个包含所有匹配字符串的元组。

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

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
2時間のPython計画:現実的なアプローチ2時間のPython計画:現実的なアプローチApr 11, 2025 am 12:04 AM

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

Python:主要なアプリケーションの調査Python:主要なアプリケーションの調査Apr 10, 2025 am 09:41 AM

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

2時間でどのくらいのPythonを学ぶことができますか?2時間でどのくらいのPythonを学ぶことができますか?Apr 09, 2025 pm 04:33 PM

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

プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は?プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は?Apr 02, 2025 am 07:18 AM

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

中間の読書にどこでもfiddlerを使用するときにブラウザによって検出されないようにするにはどうすればよいですか?中間の読書にどこでもfiddlerを使用するときにブラウザによって検出されないようにするにはどうすればよいですか?Apr 02, 2025 am 07:15 AM

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

Python 3.6にピクルスファイルをロードするときに「__Builtin__」モジュールが見つからない場合はどうすればよいですか?Python 3.6にピクルスファイルをロードするときに「__Builtin__」モジュールが見つからない場合はどうすればよいですか?Apr 02, 2025 am 07:12 AM

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

風光明媚なスポットコメント分析におけるJieba Wordセグメンテーションの精度を改善する方法は?風光明媚なスポットコメント分析におけるJieba Wordセグメンテーションの精度を改善する方法は?Apr 02, 2025 am 07:09 AM

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

正規表現を使用して、最初の閉じたタグと停止に一致する方法は?正規表現を使用して、最初の閉じたタグと停止に一致する方法は?Apr 02, 2025 am 07:06 AM

正規表現を使用して、最初の閉じたタグと停止に一致する方法は? HTMLまたは他のマークアップ言語を扱う場合、しばしば正規表現が必要です...

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

mPDF

mPDF

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

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター