文字列の先頭や末尾などの位置にマッチするパターンを記述する

正規表現では文字列の先頭や末尾、単語の境界など文字そのものではなく位置にマッチするメタ文字が用意されています。例えば文字の先頭とマッチするメタ文字を使用すれば、そのあとに記述したパターンが文字の先頭から始まっている場合だけマッチさせることができます。ここでは Python の正規表現で文字列の先頭や末尾など位置にマッチするパターンの記述方法について解説します。

(Last modified: )

文字列の先頭にマッチする(^, \A)

メタ文字のひとつであるキャレット(^)は文字列の先頭位置ににマッチします。

^

メタ文字のひとつである \A も同じように文字列の先頭位置ににマッチします。

\A

例えば次のようなパターンは文字列の先頭から始まる文字列で、 R で始まり、そのあとに e そして d が続く文字列にマッチします。

r'^Red'

Red や Reduce にはマッチします。ただし 文字列の先頭以外にある場合は Red であってもマッチしません。

Red Color
〇 Reduce
✕ Radio
✕ Color is Red
サンプルコード

簡単なサンプルで試してみます。

import re

pattern = re.compile(r'^Red')

print(bool(pattern.search('Red Table')))
>> True
print(bool(pattern.search('Reduce speed')))
>> True
print(bool(pattern.search('Border Color is Red')))
>> False

^ の代わりに \A を使用した場合も同じ結果となります。

import re

pattern = re.compile(r'\ARed')

print(bool(pattern.search('Red Table')))
>> True
print(bool(pattern.search('Reduce speed')))
>> True
print(bool(pattern.search('Border Color is Red')))
>> False

文字列の末尾にマッチする($, \Z)

メタ文字のひとつであるドル記号($)は文字列の末尾位置、および末尾に改行があった場合は改行の直前にマッチします。

$

メタ文字のひとつである \Z も同じように文字列の末尾位置ににマッチします。ただし \Z の場合は末尾に改行があった場合はマッチしません。

\A

例えば次のようなパターンは Script という文字列が文字列の末尾にある場合にマッチします。

r'Script$'

JavaScript や TypeScript にはマッチします。ただし 文字列の末尾以外にある場合は JavaScript であってもマッチしません。

〇 JavaScript
〇 I am studying TypeScript
✕ script
✕ PostScript is difficult

また末尾に改行がある場合は改行の直前にもマッチします。

〇 JavaScript\n
〇 I am studying TypeScript\n
サンプルコード

簡単なサンプルで試してみます。

import re

pattern = re.compile(r'Script$')

print(bool(pattern.search('JavaScript')))
>> True
print(bool(pattern.search('I am studying TypeScript')))
>> True
print(bool(pattern.search('PostScript is difficult')))
>> False
print(bool(pattern.search('OpenScript\n')))
>> True

$ の代わりに \Z を使用した場合も、末尾に改行がある場合を除いて同じ結果となります。末尾に改行がある場合はマッチしません。

import re

pattern = re.compile(r'Script\Z')

print(bool(pattern.search('JavaScript')))
>> True
print(bool(pattern.search('I am studying TypeScript')))
>> True
print(bool(pattern.search('PostScript is difficult')))
>> False
print(bool(pattern.search('OpenScript\n')))
>> False

単語の先頭および末尾にマッチする(\b)

メタ文字のひとつである \b は単語の先頭位置および末尾位置にマッチします。

\b

例えば次のようなパターンは work という文字列が単語の先頭にある場合にマッチします。

r'\bwork'

work や working にはマッチします。ただし fireworks のように単語の先頭以外にある場合はマッチしません。

work
〇 a working person
✕ worm
✕ Go to see fireworks

\b は単語の先頭だけでなく単語の末尾にもマッチします。例えば次のようなパターンは ing という文字列が単語の末尾にある場合にマッチします。

r'ing\b'

swimming や working にはマッチします。ただし ingenious のように単語の末尾以外にある場合はマッチしません。

〇 swimming
〇 a working person
✕ worm
✕ ingenious design

\b を単語の先頭と末尾にそれぞれ使用した次のようなパターンは working という単語の場合だけにマッチします。前後に文字が付いている場合はマッチしません。

r'\bworking\b'
サンプルコード

簡単なサンプルで試してみます。

import re

pattern = re.compile(r'\bwork')

print(bool(pattern.search('a working person')))
>> True
print(bool(pattern.search('Go to see fireworks')))
>> False

pattern = re.compile(r'ing\b')

print(bool(pattern.search('a working person')))
>> True
print(bool(pattern.search('ingenious design')))
>> False

単語の先頭と末尾以外にマッチする(\B)

メタ文字のひとつである \B は単語の先頭と末尾以外の位置にマッチします。

\B

例えば次のようなパターンは単語の先頭以外の位置から始まり、そのあとに am と続く場合にマッチします。

r'\Bam'

sample や program にはマッチします。ただし amount のように単語の先頭から始まっている場合はマッチしません。

〇 sample
〇 Difficult program
✕ full amount

例えば次のようなパターンは am という文字列のあとが単語の末尾以外の位置だった場合にマッチします。

r'am\B'

sample や amount にはマッチします。ただし program のように am が単語の末尾にある場合はマッチしません。

〇 sample
〇 full amount
✕ Difficult program
サンプルコード

簡単なサンプルで試してみます。

import re

pattern = re.compile(r'\Bam')

print(bool(pattern.search('Difficult program')))
>> True
print(bool(pattern.search('full amount')))
>> False

pattern = re.compile(r'am\B')

print(bool(pattern.search('full amount')))
>> True
print(bool(pattern.search('Difficult program')))
>> False

-- --

Python の正規表現で文字列の先頭や末尾など位置にマッチするパターンの記述方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。