Python 正規表現で一致した最初の文字列を返す(search)

正規表現で一致した最初の文字列を返すサンプルです。
searchメソッドを使用します。

確認環境
・Python 3.7.2

目次

searchメソッド

re.search(pattern, string, flags=0)
  • 1つめの引数は、正規表現です。
  • 2つめの引数は、対象の文字列です。
  • 戻り値は、matchオブジェクトです。
  • 対象がヒットしない場合はNoneを返します。
  • matchオブジェクトがあるかはif文で判定できます。
    match = re.search(pattern, string)
    if match:
      process(match)
  • 最初にimport reの記述が必要です。
  • 以下はPython公式ドキュメントのsearchメソッドのリンクです。
    https://docs.python.org/ja/3/library/re.html#re.search

文字列を検索する

文字列を検索するサンプルです。

# coding: utf-8
import re

a = "BC"

b = re.search(a,'ABCABC')
if b:
	print(b.group(0)) # BC
else:
	print(b)

c = re.search(a,'ADE')
if c:
	print(c.group(0))
else:
	print(c) # None

4行目は、文字列「BC」を指定しています。
6行目のsearchメソッドの引数にはBCが2つあります。
7行目のif文はmatchオブジェクトがあるので8行目が実行されます。
8行目は、BCが表示されます。groupメソッドは一致した文字列を返します。b.group(1)とした場合は、IndexErrorになります。
13行目のif文はmatchオブジェクトがないので16行目が実行されます。
16行目はNoneが表示されます。

文字をORで検索する

文字をORで検索するサンプルです。

# coding: utf-8
import re

a = "[AE]"

b = re.search(a,'ABCABC')

if b:
	print(b.group(0)) # A
else:
	print(b)

4行目は、正規表現で「A」または「E」を指定しています。
6行目はsearchメソッドです。
8行目のif文はmatchオブジェクトがあるので9行目が実行されます。
9行目は、Aが表示されます。groupメソッドは一致した文字列を返します。

文字を否定で検索する

文字を否定で検索するサンプルです。

# coding: utf-8
import re

a = "[^A]"

b = re.search(a,'ZZZ')

if b:
	print(b.group(0)) # Z
else:
	print(b)

4行目は、正規表現で「A」以外の文字を指定しています。
6行目はsearchメソッドです。
8行目のif文はmatchオブジェクトがあるので9行目が実行されます。
9行目は、Zが表示されます。groupメソッドは一致した文字列を返します。

文字を範囲で指定して検索する

文字を範囲で指定して検索するサンプルです。

# coding: utf-8
import re

a = "[A-C]"

b = re.search(a,'ZZC')

if b:
	print(b.group(0)) # C
else:
	print(b)

4行目は、正規表現で「A」または「B」または「C」の文字を指定しています。
6行目はsearchメソッドです。
8行目のif文はmatchオブジェクトがあるので9行目が実行されます。
9行目は、Cが表示されます。groupメソッドは一致した文字列を返します。

先頭の文字列を検索する

先頭の文字列を検索するサンプルです。

# coding: utf-8
import re

a = "^AB"

b = re.search(a,'ABC')

if b:
	print(b.group(0)) # AB
else:
	print(b)

4行目は、正規表現で「AB」が先頭であることを指定しています。
6行目はsearchメソッドです。
8行目のif文はmatchオブジェクトがあるので9行目が実行されます。
9行目は、ABが表示されます。groupメソッドは一致した文字列を返します。

文字列の最後尾を検索する

文字列の最後尾を検索するサンプルです。

# coding: utf-8
import re

a = "BC$"

b = re.search(a,'ABC')

if b:
	print(b.group(0)) # BC
else:
	print(b)

4行目は、正規表現で最後尾に「BC」が最後尾であることを指定しています。
6行目はsearchメソッドです。
8行目のif文はmatchオブジェクトがあるので9行目が実行されます。
9行目は、BCが表示されます。groupメソッドは一致した文字列を返します。

連続する文字を指定して検索する

連続する文字を指定して検索するサンプルです。

# coding: utf-8
import re

a = "c{2}"

b = re.search(a,'acccb')

if b:
	print(b.group(0)) # cc
else:
	print(b)

4行目は、正規表現で「c」が2回連続することを指定しています。
6行目はsearchメソッドです。
8行目のif文はmatchオブジェクトがあるので9行目が実行されます。
9行目は、ccが表示されます。groupメソッドは一致した文字列を返します。

連続する文字(個以上)を指定して検索する

連続する文字(個以上)を指定して検索するサンプルです。

# coding: utf-8
import re

a = "c{2,}"

b = re.search(a,'acccb')

if b:
	print(b.group(0)) # ccc
else:
	print(b)

4行目は、正規表現で「c」が2回以上連続することを指定しています。
6行目はsearchメソッドです。
8行目のif文はmatchオブジェクトがあるので9行目が実行されます。
9行目は、cccが表示されます。groupメソッドは一致した文字列を返します。

1回以上出現している文字を検索する

1回以上出現している文字を検索するサンプルです。

# coding: utf-8
import re

a = "c+"

b = re.search(a,'accb')

if b:
	print(b.group(0)) # cc
else:
	print(b)

4行目は、正規表現で「c」が1回以上出現しているを指定しています。
6行目はsearchメソッドです。
8行目のif文はmatchオブジェクトがあるので9行目が実行されます。
9行目は、ccが表示されます。groupメソッドは一致した文字列を返します。

大文字小文字を無視する

大文字小文字を無視するサンプルです。

# coding: utf-8
import re

a = "c+"

b = re.search(a,'ACB',re.IGNORECASE)

if b:
	print(b.group(0)) # C
else:
	print(b)

4行目は、正規表現で「c」が1回以上出現しているを指定しています。
6行目は、searchメソッドの3つめの引数にre.IGNORECASEを指定しています。大文字小文字を無視します。
8行目のif文はmatchオブジェクトがあるので9行目が実行されます。
9行目は、大文字のCが表示されます。groupメソッドは一致した文字列を返します。

1桁以上の半角数値のみかをチェックする

1桁以上の半角数値のみかをチェックするサンプルです。

# coding: utf-8
import re

a = "^[0-9]+$"

b = re.search(a,'123456')

if b:
	print(b.group(0)) # 123456
else:
	print(b)

4行目は、正規表現で1桁以上の半角数値のみかを指定しています。
6行目はsearchメソッドです。
8行目のif文はmatchオブジェクトがあるので9行目が実行されます。
9行目は、123456が表示されます。groupメソッドは一致した文字列を返します。

1桁以上の半角数値または英字の小文字(a-f)のみかをチェックする

1桁以上の半角数値または英字の小文字(a-f)のみかをチェックするサンプルです。

# coding: utf-8
import re

a = "^[0-9a-f]+$"

b = re.search(a,'123456abc')

if b:
	print(b.group(0)) # 123456abc
else:
	print(b)

4行目は、正規表現で1桁以上の半角数値または英字の小文字(a-f)のみかを指定しています。
6行目はsearchメソッドです。
8行目のif文はmatchオブジェクトがあるので9行目が実行されます。
9行目は、123456abcが表示されます。groupメソッドは一致した文字列を返します。

郵便番号の桁数と数値のチェックする

郵便番号の桁数と数値のチェックするサンプルです。

# coding: utf-8
import re

a = "^\d{3}-\d{4}$"

b = re.search(a,'123-4567')

if b:
	print(b.group(0)) # 123-4567
else:
	print(b)

4行目は、正規表現で郵便番号の桁数と数値のチェックを指定しています。
6行目はsearchメソッドです。
8行目のif文はmatchオブジェクトがあるので9行目が実行されます。
9行目は、123-4567が表示されます。groupメソッドは一致した文字列を返します。

正規表現の主なパターン

以下は、正規表現の主なパターンです。

パターン パターンの意味
ABD ABDという文字か。
[ABD] A or B or Dのどれか1文字が入っているか。
[^ABD] A と B と D以外の1文字が入っているか。
[A-D] A or B or C or Dのどれか1文字が入っているか。
A|B|D A or B or Dのどれか1文字が入っているか。
[a-zA-Z] 英字の小文字のaからzまたは大文字のAからZのどれか1文字が入っているか。
^A 先頭の文字はAか。
A$ 最後尾の文字はAか。
* *の直前の文字が0回以上の繰り返し。
+ +の直前の文字が1回以上の繰り返し。
? ?の直前の文字が0回または1回の繰り返し。
{n} n回続いている。
{n,} n回以上続いている。
 . 任意の一文字を表す。
¥s 比較する文字に、空白1文字がある。
¥S 比較する文字に、空白以外の1文字がある。
¥d 比較する文字に、数字1文字がある。 ([0-9]と同じ)
¥D 比較する文字に、数字以外の1文字がある。  ([^0-9]と同じ)
¥w (8ビットパターンの場合)比較する文字に、小文字の英字 or 大文字の英字 or 数値 or アンダースコアの1文字がある。[a-zA-Z0-9_]と同じ
(Unicode (str) パターンの場合)Unicode 単語文字にマッチします。
¥W ¥wの否定。
[^¥w]と同じ

以下は、re --- 正規表現操作のリンクです。
https://docs.python.org/ja/3/library/re.html

関連の記事

Python 文字列を分割してリストにする(split)
Python 文字列を置換する(replace)

△上に戻る