Python(正規表現)

2025年5月 8日 (木)

[Python]特定の文字列で始まる(始まらない)文字列を抽出する

正規表現で^記号は文字列の先頭を表すため、これを正規表現パターンに利用する。以下の例では、複数の文字列からなるリストから、リスト内包表記を使用して、指定した正規表現パターンにマッチする(しない)要素を取り出している。

>>> import re
>>> ss = ['石見舞菜香', '鈴木みのり', '瀬戸麻沙美', 'のぐちゆり', '和多田美咲']
>>> # 「美」で終わる氏名
>>> [s for s in ss if re.search('美$', s)]
['瀬戸麻沙美']
>>> # 「美」で終わらない氏名
>>> [s for s in ss if not re.search('美$', s)]
['石見舞菜香', '鈴木みのり', 'のぐちゆり', '和多田美咲']
>>> # 「美」を含むが「美」で終わらない氏名
>>> [s for s in ss if re.search('美.+$', s)]
['和多田美咲']

ルックアラウンド式(lookaround expression)を使うこともできる。

>>> # 「美」で終わる氏名 ※肯定的な後読み
>>> [s for s in ss if re.search('(?<=美)$', s)]
['瀬戸麻沙美']
>>> # 「美」で終わらない氏名 ※否定的な後読み
>>> [s for s in ss if re.search('(?<!美)$', s)]
['石見舞菜香', '鈴木みのり', 'のぐちゆり', '和多田美咲']

ルックアラウンド式については、以下のページの「Lookaround の概要」を参照のこと。

2025年4月20日 (日)

[Python]特定の文字列で終わる(終わらない)文字列を抽出する

正規表現で$記号は文字列の最後を表すため、これを正規表現パターンに利用する。以下の例では、複数の文字列からなるリストから、リスト内包表記を使用して、指定した正規表現パターンにマッチする(しない)要素を取り出している。

>>> import re
>>> ss = ['石見舞菜香', '鈴木みのり', '瀬戸麻沙美', 'のぐちゆり', '和多田美咲']
>>> # 「の」で始まる氏名
>>> [s for s in ss if re.search('^の', s)]
['のぐちゆり']
>>> # 「の」で始まらない氏名
>>> [s for s in ss if not re.search('^の', s)]
['石見舞菜香', '鈴木みのり', '瀬戸麻沙美', '和多田美咲']
>>> # 「の」を含むが「の」で始まらない氏名
>>> [s for s in ss if re.search('^.+の', s)]
['鈴木みのり']

ルックアラウンド式(lookaround expression)を使うこともできる。

>>> # 「の」で始まる氏名 ※肯定的な先読み
>>> [s for s in ss if re.search('^(?=の)', s)]
['のぐちゆり']
>>> # 「の」で始まらない氏名 ※否定的な先読み
>>> [s for s in ss if re.search('^(?!の)', s)]
['石見舞菜香', '鈴木みのり', '瀬戸麻沙美', '和多田美咲']

ルックアラウンド式については、以下のページの「Lookaround の概要」を参照のこと。

2025年4月 9日 (水)

[Python]文字列が指定の正規表現パターンとマッチするか否か調べる

reモジュールのsearch関数を使う。指定した正規表現パターンとマッチするとMatchオブジェクトを返し、マッチしないとNoneを返す。戻り値はブール型ではとそれぞれTrueとFalseになるので、そのままブール式として利用できる。

>>> import re
>>> s = '和多田美咲さん'
>>> print(re.search('美咲さん$', s))
<re.Match object; span=(3, 7), match='美咲さん'>
>>> print(re.search('^和', s))
<re.Match object; span=(0, 1), match='和'>
>>> print(re.search('和$', s))
None
>>> bool(re.search('美咲さん$', s))
True
>>> bool(re.search('和$', s))
False

複数を一度に調べたいときは、リストにしてリスト内包表記を使う。

>>> ss = ['石見舞菜香', '鈴木みのり', '瀬戸麻沙美', '和多田美咲']
>>> [s for s in ss if re.search('美', s)]
['瀬戸麻沙美', '和多田美咲']
>>> [s for s in ss if re.search('美$', s)]
['瀬戸麻沙美']
>>> [s for s in ss if re.search('希世乃', s)]
[]
>>> len([s for s in ss if re.search('美', s)])
2
>>> len([s for s in ss if re.search('希世乃', s)])
0
無料ブログはココログ

■■

■■■