Python RegEx

RegExまたは正則表达式は検索パターンを形成する文字列のシーケンスです。

RegExは指定された検索パターンを含むかどうかを確認するために使用できます。

RegExモジュール

Pythonは「 re の標準ライブラリで、正規表現を処理するために使用できます。

インポート re モジュール:

import re

PythonのRegEx

インポート re モジュールがインポートされた後、正規表現を使用し始めることができます:

"China"で始まり「country」で終わる文字列が存在するか確認します:

import re
txt = "China is a great country"
x = re.search("^China.*country$", txt)

実行例

RegEx関数

re モジュールは、文字列を検索してマッチングを行うための関数群を提供します:

関数 説明
findall すべてのマッチングを含むリストを返します
search 文字列の任意の位置にマッチングがある場合、Matchオブジェクトを返します
split マッチングごとに文字列を分割するリストを返します
sub 一つまたは複数のマッチングを文字列で置き換えます

構文記号

構文記号は特別な意味を持つ文字です:

文字 説明 TIY
[] 文字群 "[a-m]" 試してみてください
\ 特別なシーケンス(特殊文字のエスケープにも使用できます) "\d" 試してみてください
. 任意の文字(改行文字を除く) "he..o" 試してみてください
^ 始まる "^hello" 試してみてください
$ 終わる "world$" 試してみてください
* 零回または複数回に一致 "aix*" 試してみてください
+ 一度または複数回に一致 "aix+" 試してみてください
{} 特定の回数に一致する "al{2}" 試してみてください
| どちらか一方 "falls|stays" 試してみてください
() キャプチャとグループ

特別なシーケンス

特別なシーケンスは以下の通りです \ 次の表のどれかの文字が続くと、特別な意味を持つ:

文字 説明 TIY
\A 指定された文字が文字列の開始に存在する場合、マッチングを返します "\AThe" 試してみてください
\b 指定された文字が単語の開始または終了に位置するマッチングを返します r"\bain"
r"rain\b"
試してみてください
試してみてください
\B 指定された文字が存在するマッチングを返しますが、単語の開始(または終了)に位置していません r"\Bain"
r"rain\B"
試してみてください
試してみてください
\d 数字(0-9)を含む文字列のマッチングを返します "\d" 試してみてください
\D 数字を含まない文字列のマッチングを返します "\D" 試してみてください
\s 空白文字を含む文字列のマッチングを返します "\s" 試してみてください
\S 空白文字を含まない文字列のマッチングを返します "\S" 試してみてください
\w 文字列に任何のワード文字が含まれているマッチングを返します
(aからZの文字、0から9の数字、アンダースコア_文字)
"\w" 試してみてください
\W 文字列に任何のワード文字が含まれていないマッチングを返します "\W" 試してみてください
\Z 指定された文字が文字列の末尾に存在する場合、マッチングを返します "Spain\Z" 試してみてください

集合(Set)

集合(Set)は、片側の括弧括ったものです [] 内の文字群は、特別な意味を持っています:

集合 説明 試してみてください
[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] 0 から 9 の間の任意の数字のマッチを返します 試してみてください
[a-zA-Z] アルファベットの順序 a と z の間の、小文字または大文字の任意の文字のマッチを返します 試してみてください
[+] 集合では、+、*、.、|、()、$、{} は特別な意味を持たないため、[+] は次の意味を持ちます:文字列中のすべての + 文字のマッチを返します 試してみてください

findall() 関数

findall() 関数はすべてのマッチを含むリストを返します。

すべてのマッチをリストで印刷します:

import re
str = "China is a great country"
x = re.findall("a", str)
print(x)

実行例

このリストは見つかった順序でマッチを含んでいます。

マッチが見つからない場合、空のリストを返します:

マッチが見つからない場合、空のリストを返します:

import re
str = "China is a great country"
x = re.findall("USA", str)
print(x)

実行例

search() 関数

search() 関数は、文字列内のマッチを検索し、マッチがあれば Match オブジェクトを返します。

複数のマッチがあれば、最初のマッチのみを返します:

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

import re
str = "China is a great country"
x = re.search("\s", str)
print("最初の空白文字が位置にあります:", x.start())

実行例

マッチが見つからない場合の返値 None

マッチを返さない検索を行います:

import re
str = "China is a great country"
x = re.search("USA", str)
print(x)

実行例

split() 関数

split() 関数は、マッチ時に文字列が分割されるリストを返します:

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

import re
str = "China is a great country"
x = re.split("\s", str)
print(x)

実行例

指定することで置き換えの回数を制御できます maxsplit 引数を使用して出現回数を制御します:

文字列を最初に現れる場所で分割します:

import re
str = "China is a great country"
x = re.split("\s", str, 1)
print(x)

実行例

sub() 関数

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

数字 9 で各空白文字を置き換えます:

import re
str = "China is a great country"
x = re.sub("\s", "9", str)
print(x)

実行例

指定することで置き換えの回数を制御できます count 置き換えの回数を制御するパラメータ:

最初の2回の出现を置き換えます:

import re
str = "China is a great country"
x = re.sub("\s", "9", str, 2)
print(x)

実行例

Match オブジェクト

Match オブジェクトは、検索および結果情報を含むオブジェクトです。

注釈:マッチングがない場合の返り値 None、Match オブジェクトではなく。

検索を実行すると、Match オブジェクトが返されます:

import re
str = "China is a great country"
x = re.search("a", str)
print(x) # オブジェクトを出力します

実行例

Match オブジェクトは、検索および結果情報を取得するための属性およびメソッドを提供します:

  • span() 返されたタプルには、マッチングの開始位置と終了位置が含まれています
  • .string 関数に渡された文字列を返します
  • group() マッチングした文字列の部分を返します

最初のマッチングが現れる位置(開始位置と終了位置)を出力します。

大文字「C」で始まる任意の単語を正規表現で検索します:

import re
str = "China is a great country"
x = re.search(r"\bC\w+", str)
print(x.span())

実行例

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

import re
str = "China is a great country"
x = re.search(r"\bC\w+", str)
print(x.string)

実行例

マッチングした文字列の部分を出力します。

大文字「C」で始まる任意の単語を正規表現で検索します:

import re
str = "China is a great country"
x = re.search(r"\bC\w+", str)
print(x.group())

実行例

注釈:マッチング項目がない場合の返り値 None、Match オブジェクトではなく。