Pythonのsearchメソッドの正規表現で一致した最初の文字列を返すサンプルです。
(確認環境:Python 3)
目次
メソッド | 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) |
大文字小文字を無視する | |
パターン | 正規表現のパターン |
searchメソッド
re.search(pattern, string, flags=0) |
- 1つめの引数は、正規表現です。
- 2つめの引数は、対象の文字列です。
- 戻り値は、matchオブジェクトです。
- 対象がヒットしない場合はNoneを返します。
- matchオブジェクトがあるかはif文で判定できます。
match = re.search(pattern, string)
if match:
process(match) - 最初にimport reの記述が必要です。
文字列を指定
# coding: utf-8
import re
a = "BC"
b = re.search(a,'ABCABC')
if b:
print(b.group(0)) # BC
else:
print(b)
4行目は、文字列「BC」を指定しています。
7行目のif文はmatchオブジェクトがあるので8行目が実行されます。
8行目は、BCが表示されます。groupメソッドは一致した文字列を返します。b.group(1)とした場合は、IndexErrorになります。
文字を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」を指定しています。
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」以外の文字を指定しています。
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」の文字を指定しています。
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」の文字を指定しています。
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」の文字を指定しています。
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回連続することを指定しています。
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回以上連続することを指定しています。
9行目は、cccが表示されます。groupメソッドは一致した文字列を返します。
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回以上出現しているを指定しています。
9行目は、ccが表示されます。groupメソッドは一致した文字列を返します。
数値(0-9)の5桁+先頭と末尾も(0-9)
# coding: utf-8
import re
a = "^[0-9]{5}$"
b = re.search(a,'12345')
if b:
print(b.group(0)) # 12345
else:
print(b)
9行目のgroupメソッドは一致した文字列を返します。
数値(0-9)と英字(a-f)の5桁+先頭と末尾も(0-9 or a-f)
# coding: utf-8
import re
a = "^[0-9a-f]{5}"
b = re.search(a,'1a23b')
if b:
print(b.group(0)) # 1a23b
else:
print(b)
9行目のgroupメソッドは一致した文字列を返します。
郵便番号(数値3桁とハイフンと数値4桁)+先頭と末尾も(0-9)
# 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)
\dは、数値を意味します。[0-9]と同じです。
9行目の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を指定しています。大文字小文字を無視します。
9行目は、大文字のCが表示されます。groupメソッドは一致した文字列を返します。
以下はPython公式ドキュメントのsearchメソッドのリンクです。
https://docs.python.org/ja/3/library/re.html#re.search
正規表現のパターン
以下は、re --- 正規表現操作のリンクです。
https://docs.python.org/ja/3/library/re.html
関連の記事