TECH I.S.

Python正規表現


RegEx(正規表現)は、検索パターンを形成する一連の文字です。

RegExを使用すると、文字列に指定した検索パターンが含まれているかどうかを確認できます。


正規表現モジュール

Pythonにはreという組み込みパッケージがあり、正規表現を操作するために使用できます。

reモジュールをインポートします。
import re

Pythonでの正規表現

reモジュールをインポートしたら、正規表現の使用を開始できます。

文字列を検索して、"The"で始まり"Spain"で終わるかどうかを確認します。

import re txt = "The rain in Spain" x = re.search("^The.*Spain$", txt)

正規表現関数

reモジュールは、一致する文字列を検索できる一連の関数を提供します。
関数 説明
findall すべての一致を含むリストを返します
search 文字列内のどこかに一致がある場合はMatchオブジェクトを返します。
split 文字列が一致するたびに分割されたリストを返します。
sub 1つまたは複数の一致を文字列に置き換えます

メタ文字

メタ文字は、特別な意味を持つ文字です。


文字 説明 試してみましょう
[ ] 集合 "[a-m]" それを試してみてください »
\ 特殊なシーケンスを通知します(特殊文字のエスケープにも使用できます) "\d" それを試してみてください »
. 任意の文字(改行文字を除く) "he..o" それを試してみてください »
^ で始まる "^hello" それを試してみてください »
$ で終わる "planet$" それを試してみてください »
* ゼロ回以上の出現 "he.*o" それを試してみてください »
+ 1つ以上の出現 "he.+o" それを試してみてください »
? 0回または1回の出現 "he.?o" それを試してみてください »
{} 指定された回数だけ出現 "he.{2}o" それを試してみてください »
| または "falls|stays" それを試してみてください »
() キャプチャとグループ化

特別なシーケンス

特別なシーケンスは、\の後に以下のリストの文字のいずれかが続くもので、特別な意味を持ちます。


文字 説明 試してみましょう
\A 指定された文字が文字列の先頭にある場合に一致を返します。 "\AThe" それを試してみてください »
\b 指定された文字が単語の先頭または末尾にある一致を返します。
(先頭の"r"は、文字列が"生の文字列"として扱われることを確認します)
r"\bain"
r"ain\b"
それを試してみてください »

それを試してみてください »
\B 指定された文字が存在するが、単語の先頭(または末尾)には存在しない一致を返します。
(先頭の"r"は、文字列が"生の文字列"として扱われることを確認します)
r"\Bain"
r"ain\B"
それを試してみてください »

それを試してみてください »
\d 文字列に数字(0~9の数字)が含まれる一致を返します "\d" それを試してみてください »
\D 文字列に数字が含まれていない一致を返します "\D" それを試してみてください »
\s 文字列に空白文字が含まれる一致を返します "\s" それを試してみてください »
\S 文字列に空白文字が含まれていない一致を返します "\S" それを試してみてください »
\w 文字列に任意の単語文字(a~Zの文字、0~9の数字、およびアンダースコア _文字)が含まれる一致を返します。 "\w" それを試してみてください »
\W 文字列に単語文字が含まれない一致を返します。 "\W" それを試してみてください »
\Z 指定された文字が文字列の末尾にある場合に一致を返します "Spain\Z" それを試してみてください »

セット

セットとは、特別な意味を持つ角括弧[]で囲まれた文字のセットです。


セット 説明 試してみましょう
[arn] 指定された文字(a、r、またはn)のいずれかが存在する一致を返します。 それを試してみてください »
[a-n] アルファベット順にaからnまでの小文字の一致を返します。 それを試してみてください »
[^arn] a、r、nを除く任意の文字の一致を返します。 それを試してみてください »
[0123] 指定された数字(0、1、2、または 3)のいずれかが存在する一致を返します。 それを試してみてください »
[0-9] 0から9までの任意の数字の一致を返します それを試してみてください »
[0-5][0-9] 00と59の任意の2桁の数字の一致を返します。 それを試してみてください »
[a-zA-Z] aからzまでのアルファベット順の任意の文字(小文字または大文字)の一致を返します。 それを試してみてください »
[+] セットでは、+、*、.、|、()、$、{}には特別な意味がないため、[+] は次のことを意味します: 文字列内の任意の+文字との一致を返す それを試してみてください »

findall()関数

findall()関数は、すべての一致を含むリストを返します。

すべての一致のリストを出力します。

import re txt = "The rain in Spain" x = re.findall("ai", txt) print(x)

リストには、見つかった順に一致が含まれます。

一致するものが見つからない場合は、空のリストが返されます。

一致するものが見つからない場合は、空のリストを返します。

import re txt = "The rain in Spain" x = re.findall("Portugal", txt) print(x)

search()関数

search()関数は、一致する文字列を検索し、一致するものがあればMatchオブジェクトを返します。

複数の一致がある場合は、最初に一致したもののみが返されます。

文字列内の最初の空白文字を検索します。

import re txt = "The rain in Spain" x = re.search("\s", txt) print("最初の空白文字は次の位置にあります:", x.start())

一致するものが見つからない場合は、値Noneが返されます。

一致を返さない検索を行います。

import re txt = "The rain in Spain" x = re.search("Portugal", txt) print(x)

split()関数

Split()関数は、一致するたびに文字列が分割されたリストを返します。

各空白文字で分割します。

import re txt = "The rain in Spain" x = re.split("\s", txt) print(x)
maxsplitパラメータを指定することで、出現回数を制御できます。

最初に出現する文字列のみを分割します。

import re txt = "The rain in Spain" x = re.split("\s", txt, 1) print(x)

sub()関数

sub()関数は、一致した文字列を選択したテキストに置き換えます。

すべての空白文字を数字の9に置き換えます。

import re txt = "The rain in Spain" x = re.sub("\s", "9", txt) print(x)
countパラメーターを指定することで、置換の数を制御できます。

最初の2つの出現箇所を置き換えます。

import re txt = "The rain in Spain" x = re.sub("\s", "9", txt, 2) print(x)

一致オブジェクト

一致オブジェクトは、検索と結果に関する情報を含むオブジェクトです。


注意:一致するものがない場合は、Matchオブジェクトの代わりに値None が返されます。


Matchオブジェクトを返す検索を実行します。

import re txt = "The rain in Spain" x = re.search("ai", txt) print(x) #これはオブジェクトを出力します

Matchオブジェクトには、検索と結果に関する情報を取得するために使用されるプロパティとメソッドがあります。

.span()は、一致の開始位置と終了位置を含むタプルを返します。 .stringは、関数に渡された文字列を返します。 .group()は、一致した文字列の部分を返します。

最初に一致した位置(開始位置と終了位置)を出力します。

正規表現は、大文字の「S」で始まる単語を探します。

import re txt = "The rain in Spain" x = re.search(r"\bS\w+", txt) print(<strong>x.span()</strong>)

関数に渡された文字列を出力します。

import re txt = "The rain in Spain" x = re.search(r"\bS\w+", txt) print(<strong>x.string</strong>)

一致した文字列の部分を出力します。

正規表現は、大文字の「S」で始まる単語を探します。

import re txt = "The rain in Spain" x = re.search(r"\bS\w+", txt) print(<strong>x.group()</strong>)

注意:一致するものがない場合は、Matchオブジェクトの代わりに値Noneが返されます。


プログラミング学習を加速させる

プログラミングをプロの講師に教えてもらいませんか。

テックアイエスのプログラミングスクールは初心者も大歓迎です。年齢制限もありません。転職・副業に強く、挫折させない手厚いサポートで稼ぐ力を身につけましょう!

スクールの詳細