LoginSignup
8
10

More than 5 years have passed since last update.

正規表現が苦手な人に送る自作ツール「JPNStoRegex」

Posted at

はじめに

 このページをご覧の皆様は普段正規表現は書きますでしょうか?私は最近、文字列で構成された、構造化されていない大量のデータを扱いやすいように加工する際にその威力を痛感し、学んでてよかったなぁと感じました。しかし、実際のところ、きちんとスムーズに正規表現が扱えたとはいい難く、あんな機能があったはずだけど演算子はなんだっけ…とググりながらの作業となってしまいました。そのような経験から、もっと素早く正規表現を使いこなしたいと願い、また、きっと同じように正規表現の凄さはわかってるけども、うまく使えなくて苦手だと、もどかしい思いをしている人が居るに違いないと考えこのツールを作りました。

「JPNStoRegex」とは

ソース等はこちら
https://github.com/5hyn3/JPNStoRegex
名前の通り、日本語を正規表現に変換するツールです。変換と言っても、高度な自然言語処理などをして意味を汲み取って正規表現を自動生成するような高尚なものではなく、予め決められたルールに従って、半角スペースでわかち書きされた日本語をそのまま正規表現に置換するという単純なものとなっています。単純ですが、正規表現でどんなことが出来るかわかっている人や、正規表現のあまりの抽象さで大変な思いをしている人には業務効率改善の助けになるとともに、正規表現に対する理解を深めることが出来るのではないかと思います。

使い方

詳細はgithubを御覧ください。ここでは軽く説明します。ここで扱う日本語は、半角スペースで区切られた日本語で、プログラム上ではこの一区切りを一つの単位として扱い以下のルールに従って単純な置換処理を行っています。

日本語 正規表現
タブ \t
任意の文字 .
英数字 \w
英数字以外 \W
空白文字 \s
空白文字以外 \S
半角数字 \d
半角数字以外 \D
単語境界 \b
|
全角数字 [0-9]
ひらがな [ぁ - ん]
カタカナ [ァ - ヴ]
半角カタカナ [ヲ - ゚]
( (
) )
が0回以上 *
が1回以上 +
が0回または1回 ?
行頭 ^
行末 $
がn回 {n}
がn回以上 {n,}
がn回以上m回以下 {n,m}

また、以上のルールに無いもの、文頭に$が存在するものは通常の文字列として特に置換などはされずにそのまま出力されます。

  • 入出力の例
入力 出力
( a か b か c ) が3回以上 (a|b|c){3,}
行頭 任意の文字 が1回以上 空白文字 ^.+/s
class 任意の文字 が1回以上 行末 class.+$

JPNStoRegexに同梱されているconverter.pyは以下のようにターミナルからコマンドライン引数を与えて出力を得ることが出来ます。

python converter.py <入力文字列>
8
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
10