JavaScript

正規表現チートシート(文字列検索、抽出、置換)

はじめに

文字列抽出・置換のための正規表現のチートシートをまとめました。
正規表現の書き方を忘れた場合に活用ください。

正規表現チートシート

基本のメタキャラクタ

任意の1文字や任意の半角数字などを指定することができます。

文字 意味
. 任意の1文字
\t タブ
\r 改行(CR)
\n 改行(LF)
\w 英単語を構成する文字(a~z,A~Z,_,1~9)
\W 英単語を構成する文字以外
\s 空白文字(半角スペース,タブ,改行,キャリッジリターン)
\S 空白文字以外
\d 半角数字(0~9)
\D 半角数字以外
\b 単語の境界に一致
[abc] 指定された文字のどれかに一致(この場合abcのいずれかに一致)
[a-z] マッチする文字の範囲を指定する表現(この場合aからzまで他には[1-9][A-Z]など文字コードが連続していれば使える。)
(pattern1|pattern2) 指定されたパターンのどれかにマッチする表現

量指定子

文字の後ろに配置し、前の文字が何回出てくるのかを指定します。

文字 意味
* 0回以上の繰り返しにマッチ
+ 1回以上の繰り返しにマッチ
{n} n回の繰り返しにマッチする表現
{n,} n回以上の繰り返しにマッチする表現
{n,m} n回以上m回以下の繰り返しにマッチする表現
? 0回または1回の出現にマッチする表現

アンカー

特定の文字が先頭、または、末尾にある文字列の場合に活用できます。

アンカー 意味
^pattern 文字列の先頭にpatternがある文字列に一致
pattern$ 文字列の末尾にpatternがある文字列に一致

活用例

利用用途の多いだろう置換内容をいくつか残しておきます。※追記予定

電話番号

0X-XXXX-XXXX
0XX-XXX-XXXX
0XXX-XX-XXXX
0XXXX-X-XXXX

^0([0-9]-[0-9]{4}|[0-9]{2}-[0-9]{3}|[0-9]{3}-[0-9]{2}|[0-9]{4}-[0-9])-[0-9]{4}$

メールアドレス

example@example.com
example1234@example.com
example-1.23_4.@example.com

[\w\-._]+@[\w\-._]+

URL

http://lusknote.com/
https://lusknote.com/page#index
https://lusknote.com?p1=p1&p2=p2

# パラメータまで取得
https?://[\w!\?/\+\-_~=;\.,\*&@#\$%\(\)'\[\]]+

# パラメータ前まで取得
https?://[\w/\.]+

指定した文字列を含まない1行

^(?!.*文字列).+$
^(?!.*[文字列]).+$
^(?!.*(文字列A|文字列B)).+$

pythonで利用する場合

ライブラリ

import re

文字列検索、抽出 : re.search(pattern, string)

条件一致する部分が複数ある場合は、最初の一致部分のみが返される。

re.search(r'[example]+', "example@example.com")

# <re.Match object; span=(0, 7), match='example'>

先頭から文字列検索、抽出 : re.match(pattern, string)

文字列の先頭から一致するかを調べる。
条件一致する部分が複数ある場合は、最初の一致部分のみが返される。

re.search(r'[example]+', "example@example.com")

# <re.Match object; span=(0, 7), match='example'>

文字列全体の検索、抽出 : re.fullmatch(pattern, string)

文字列全体が一致しているとマッチオブジェクトが返される。
そのため、完全一致していない場合Noneが返される。

re.fullmatch(r'[example]+', "example@example.com")

# None

re.fullmatch(r'[example]+@[\w\.]+', "example@example.com")

# <re.Match object; span=(0, 19), match='example@example.com'>

文字列全体から一致する文字列を抽出 : re.findall(pattern, string)

一致するすべての部分文字列をリストにして返す。

re.findall(r'(example)+', "example@example.com")

# ['example', 'example']

文字列の置換 : re.sub(pattern, repl, string)

一致した部分を他の文字列に置換できる。
置換処理された文字列が返される。

re.sub(r'(example)+', "replace", "example@example.com")

# replace@replace.com

文字列の分割 : re.split(pattern, string)

パターンにマッチした部分で文字列を分割し、リストにして返す。

re.split(',', "1,2,3,4,5")

# ['1', '2', '3', '4', '5']

マッチオブジェクトから文字列を取得したい場合

match.group()

複数の場合は、引数を指定する match.group(1)

m = re.search(r'[example]+', "example@example.com")
# <re.Match object; span=(0, 7), match='example'>

m.group()
# example

 

まとめ

正規表現の基礎とPythonで正規表現を利用する方法をまとめてみました。
チートシートとしてブックマークして活用いただけると嬉しいです!

ABOUT ME
lusk
EC歴3年、23歳。 通販カート会社に2018年新卒で入社し、エンジニア、プロジェクトマネージャー、新規事業の立ち上げを経験。 仕事を楽しくするためのツール作成や業務改善の仕組みを作ったりしてます。