本記事では正規表現でスペースを記述する方法について説明します。
スペースはそのまま記述した場合でも正規表現でマッチさせることは可能です。
しかし、全角と半角を別の文字として扱われるので両方マッチさせたい場合は特殊文字「/s」と記述する必要があります。
本記事の内容は以下の通り。
・正規表現でスペースを使う方法
・Pythonで正規表現スペースを記述する場合のサンプルコード
Pythonで記述例を紹介しているのでそちらもご活用ください。
正規表現のエスケープまとめ>>Python正規表現の記号エスケープ処理
目次
正規表現でスペースを使う方法
前述の通り、スペースが入っていた場合でも文字列として処理可能ですが、全角と半角が別の文字として扱われます。
全角と半角を区別したい場合は特殊文字を使いましょう。
全角・半角の両方のスペースにマッチさせたい場合は「s」を指定します。
「あいう えお」(半角スペース)
「あいう えお」(全角スペース)
という文字列をどちらもマッチさせたい場合、そのままではマッチしません。
以下のように指定することでマッチできます。
この場合、「あいう えお」(半角スペース)と「あいう えお」(全角スペース)の両方にマッチできます。
Pythonで正規表現スペースを記述する場合のサンプルコード
Pythonでの記述例は以下の通りです。
Pythonで正規表現をチェックする場合は「re」ライブラリを使用します。
全角・半角スペースをマッチする例
両方マッチさせる場合は「re.compile('あいうsえお')」のように指定。
1 2 3 4 5 6 | import re pattern = re.compile('あいうsえお') # 半角スペース pattern.match('あいう えお') # 全角スペース pattern.match('あいう えお') |
◆実行結果
1 2 3 | <re.match object="" span="(0," 6="" match="あいう えお"> <re.match object="" span="(0," 6="" match="あいう えお"> </re.match></re.match> |
全角スペースのみをマッチさせたい場合は「re.compile('あいう えお')」、半角のみをマッチさせたい場合は「re.compile('あいう えお')」のようにそのまま指定すればOKです。
連続したスペースをマッチさせる
繰り返しの表現を活用することで複数のスペースにマッチさせることができます。
繰り返しの記述方法は以下の通り。
{n}:スペースがn個ある場合にマッチ
*:スペースなしまたはスペースが1個以上ある場合にマッチ
+:スペースが1個以上ある場合にマッチ
例えばスペースを2つ含む文章とマッチさせたい場合は「^あいうえおs{2}かきくけこ$」のように記述します。
1 2 3 4 | import re pattern = re.compile('^あいうえおs{2}かきくけこ$') print(pattern.match('あいうえお かきくけこ')) |
◆実行結果
1 2 | <re.match object="" span="(0," 12="" match="あいうえお かきくけこ"> </re.match> |
アスタリスクを指定した場合、スペースがあってもなくてもマッチします。
1 2 3 | pattern = re.compile('^あいうえおs*かきくけこ$') print('スペースあり:' + str(pattern.match('あいうえお かきくけこ'))) print('スペースなし:' + str(pattern.match('あいうえおかきくけこ'))) |
◆実行結果
1 2 3 | スペースあり:<re.match object="" span="(0," 12="" match="あいうえお かきくけこ"> スペースなし:<re.match object="" span="(0," 10="" match="あいうえおかきくけこ"> </re.match></re.match> |
一方プラスの場合はスペースがない場合マッチしません。
1 2 3 | pattern = re.compile('^あいうえおs+かきくけこ$') print('スペースあり:' + str(pattern.match('あいうえお かきくけこ'))) print('スペースなし:' + str(pattern.match('あいうえおかきくけこ'))) |
◆実行結果
1 2 3 | スペースあり:<re.match object="" span="(0," 12="" match="あいうえお かきくけこ"> スペースなし:None </re.match> |
文字列からスペースを削除する
re.sub()を活用することで文字列からスペースを削除できます。
1 2 | string1 = 'あ い う え お' print(re.sub('s', '', string1)) |
◆実行結果
あいうえお
マッチ時にスペースを無視したい場合
スペースを無視したい場合もあると思います。
方法はいくつからありますが、今回はあらかじめ文字列からスペースを削除する方法を紹介します。
1 2 3 4 5 6 7 8 | string1 = 'あ い う え お' pattern = re.compile('^あいうえお$') # 比較したい文字列からスペースを除去 string2 = re.sub('s', '', string1) # 除去した文字列とマッチさせる print(pattern.match(string2)) |
◆実行結果
1 2 | <re.match object="" span="(0," 5="" match="あいうえお"> </re.match> |
まとめ
スペースはそのままでも正規表現で使えますが、全角と半角を別の文字として扱われるので区別の必要がない場合は特殊文字「/s」での記述が必要です。
そのまま書いてしまうと意図しないチェックとなるので注意しましょう。
正規表現は複雑に見えますが、一つ一つの記号の使い方は単純です。
一つ一つの記号を元に紐解いて行けば複雑な表現でも意味がわかるようになります。
いろいろ試してみましょう。
正規表現のエスケープまとめ>>Python正規表現の記号エスケープ処理