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

目次

メソッド searchとは
AB 文字列を指定
[AB] 文字をORで指定
[^A] 文字を否定で指定
[A-C] 文字を範囲で指定
^A 先頭の文字列を指定
A$ 末尾の文字列を指定
c{2} 連続する文字を指定
c{2,} 連続する文字(個以上)を指定
c+ 1回以上出現している文字を指定
^[0-9]{5}$ 数値(0-9)の5桁+先頭と末尾も(0-9)
^[0-9a-f]{5}$ 数値(0-9)と英字(a-f)の5桁+先頭と末尾も(0-9 or a-f)
^[0-9]{3}-[0-9]{4}$ 郵便番号(数値3桁とハイフンと数値4桁)+先頭と末尾も(0-9)
  大文字小文字を無視する

(確認環境:Python 3)

searchとは

re.search(pattern, string, flags=0)
  • re.search() は、最初に見つかった1つだけを返します。←re.findall()との違い
  • 1つめの引数は、正規表現です。
  • 2つめの引数は、対象の文字列です。
  • 戻り値は、matchオブジェクトです。
  • 対象がヒットしない場合はNoneを返します。
  • matchオブジェクトがあるかはif文で判定できます
    match = re.search(pattern, string)
    if match:
      process(match)
  • 最初にimport reの記述が必要です。

文字列を指定

import re

a = "BC"

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

3行目は、文字列「BC」を指定しています。
if文は、指定のパターンがあったのでtrueになります。
groupは一致した文字列を返します。b.group(1)とした場合は、IndexErrorになります。

文字をORで指定

import re

a = "[AE]"

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

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

3行目は、「A」または「E」を指定しています。
if文は、指定のパターンがあったのでtrueになります。

文字を否定で指定

import re

a = "[^A]"

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

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

3行目は、「A」以外の文字を指定しています。
if文は、指定のパターンがあったのでtrueになります。

文字を範囲で指定

import re

a = "[A-C]"

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

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

3行目は、「A」または「B」または「C」の文字を指定しています。
if文は、指定のパターンがあったのでtrueになります。

先頭の文字列を指定

import re

a = "^AB"

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

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

3行目は、先頭が「AB」の文字を指定しています。
if文は、指定のパターンがあったのでtrueになります。

末尾の文字列を指定

import re

a = "BC$"

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

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

3行目は、末尾が「BC」の文字を指定しています。
if文は、指定のパターンがあったのでtrueになります。

連続する文字を指定

import re

a = "c{2}"

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

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

3行目は、「c」が2回連続することを指定しています。
if文は、指定のパターンがあったのでtrueになります。

連続する文字(個以上)を指定

import re

a = "c{2,}"

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

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

3行目は、「c」が2回以上連続することを指定しています。
if文は、指定のパターンがあったのでtrueになります。

1回以上出現している文字を指定

import re

a = "c+"

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

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

3行目は、「c」が1回以上出現しているを指定しています。
if文は、指定のパターンがあったのでtrueになります。

数値(0-9)の5桁+先頭と末尾も(0-9)

import re

a = "^[0-9]{5}$"

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

if b:
	print(b.group(0)) # 12345

if文は、指定のパターンがあったのでtrueになります。

数値(0-9)と英字(a-f)の5桁+先頭と末尾も(0-9 or a-f)

import re

a = "^[0-9a-f]{5}"

b = re.search(a,'1a23b')

if b:
	print(b.group(0)) # 1a23b

if文は、指定のパターンがあったのでtrueになります。

郵便番号(数値3桁とハイフンと数値4桁)+先頭と末尾も(0-9)

import re

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

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

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

\dは、数値を意味します。[0-9]と同じです。
if文は、指定のパターンがあったのでtrueになります。

大文字小文字を無視する

import re

a = "c+"

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

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

3行目は、正規表現で「c」が1回以上出現しているを指定しています。
5行目は、searchメソッドの3つめの引数にre.IGNORECASEを指定しています。大文字小文字を無視します。
if文は、指定のパターンがあったのでtrueになります。

関連の記事

正規表現の一覧表
Python 正規表現で一致した文字列のリストを返す(findall)

△上に戻る