「正規表現」の編集履歴(バックアップ)一覧に戻る
正規表現 - (2025/05/08 (木) 21:32:46) のソース
** 目次 #contents ** 文字列が指定の正規表現パターンとマッチするか否か調べる reモジュールのsearch関数を使う。指定した正規表現パターンとマッチするとMatchオブジェクトを返し、マッチしないとNoneを返す。戻り値はブール型ではとそれぞれTrueとFalseになるので、そのままブール式として利用できる。 #highlight(){{ >>> 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 }} 複数を一度に調べたいときは、リストにしてリスト内包表記を使う。 #highlight(){{ >>> 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 }} ** 特定の文字列で始まる(始まらない)文字列を抽出する 正規表現で^記号は文字列の先頭を表すため、これを正規表現パターンに利用する。以下の例では、複数の文字列からなるリストから、リスト内包表記を使用して、指定した正規表現パターンにマッチする(しない)要素を取り出している。 #highlight(){{ >>> 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)を使うこともできる。 #highlight(){{ >>> # 「美」で終わる氏名 ※肯定的な後読み >>> [s for s in ss if re.search('(?<=美)$', s)] ['瀬戸麻沙美'] >>> # 「美」で終わらない氏名 ※否定的な後読み >>> [s for s in ss if re.search('(?<!美)$', s)] ['石見舞菜香', '鈴木みのり', 'のぐちゆり', '和多田美咲'] }} ルックアラウンド式については、以下のページの「Lookaround の概要」を参照のこと。 - https://learn.microsoft.com/ja-jp/dotnet/standard/base-types/regular-expression-language-quick-reference#lookarounds-at-a-glance ** 特定の文字列で終わる(終わらない)文字列を抽出する 正規表現で$記号は文字列の最後を表すため、これを正規表現パターンに利用する。以下の例では、複数の文字列からなるリストから、リスト内包表記を使用して、指定した正規表現パターンにマッチする(しない)要素を取り出している。 #highlight(){{ >>> 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)を使うこともできる。 #highlight(){{ >>> # 「の」で始まる氏名 ※肯定的な先読み >>> [s for s in ss if re.search('^(?=の)', s)] ['のぐちゆり'] >>> # 「の」で始まらない氏名 ※否定的な先読み >>> [s for s in ss if re.search('^(?!の)', s)] ['石見舞菜香', '鈴木みのり', '瀬戸麻沙美', '和多田美咲'] }} ルックアラウンド式については、以下のページの「Lookaround の概要」を参照のこと。 - https://learn.microsoft.com/ja-jp/dotnet/standard/base-types/regular-expression-language-quick-reference#lookarounds-at-a-glance