Text Update: 11/10, 2018 (JST)
データのクレンジングを行う場合、憶えておきたいのが正規表現(Regular Expression)です。空白や区切り文字の揺れをクレンジングしたい場合には便利です。
正規表現は様々な文字列の集合を一つの文字列で表現するための表記方法で、通常文字とメタ文字と呼ばれる特殊な意味を持たせた記号から構成される表記を行います。
正規表現
正規表現はPOSIXで規定されており、以下のような表記方法があります。
種類 | 内容 |
---|---|
単純正規表現(SRE) | レガシーな表記方法で将来廃止予定(後方互換性の確保のため) |
基本正規表現(BRE) | 一般に正規表現と言った場合はこれを指す |
拡張正規表現(ERE) | 基本正規表現を拡張したもの |
拡張正規表現
Rにおける正規表現は拡張正規表現が既定となっており、その仕様はPOSIX 1003.2標準に基づいています。
メタ文字
メタ文字(特殊な意味を持つ文字)を指定する場合はメタ文字の前にバックスラッシュ「\
」(日本語環境では円記号で表示される場合があります)を配置してください。メタ文字とは「.
」,「\
」,「|
」,「(
」,「)
」,「[
」,「{
」,「^
」,「$
」,「*
」,「+
」,「?
」 の12文字です。
文字クラス
文字クラスとは「[
」と「]
」で囲まれた文字のリストで、その内のいずれも文字ともマッチします。文字をハイフン「-
」で結んだ場合は最初の文字から最後の文字の範囲を指定することになります(ただし、ロケール依存)。
名前付き文字クラス
比較的利用頻度が多いと思われる文字クラスが名前付き文字クラスとして定義されています(ただし、ロケール依存)。
クラス | 内容 | 備考 |
---|---|---|
[:alnum:] |
アルファベットと数値 | [:alpha:] + [:digit:] |
[:alpha:] |
大小文字アルファベット | [:lower:] + [:upper:] |
[:lower:] |
小文字アルファベット | |
[:upper:] |
大文字アルファベット | |
[:digit:] |
数字 | |
[:blank:] |
空白文字、スペースとタブ | ロケールによっては全角文字も含む |
[:cntrl:] |
制御文字 | 000-037 , 177 (DEL ) |
[:graph:] |
グラフィカル文字 | [:alnum:] + [:punct:] |
[:print:] |
印字可能な文字 | [:alnum:] + [:punct:] + [:space:] |
[:punct:] |
パンクチュエーション文字 | 記号(! " # $ % & ' ( ) * + , - . / ) |
[:space:] |
空白 | [:blank:] + 改行、水平タブ、給紙、キャリッジリターン |
[:xdigit:] |
16進数 | 0-9 , A-F , a-f |