文章やデータをかんたん訂正 仕事や日常でも使える正規表現(後編)

初心者の為の正規表現
スポンサーリンク

ところでちゃんと例題やってくれてますか??

読んでるだけやと、良くある「○○する○○な方法 20個」と同じく”なるほどなるほど”で終わります。
ライフハック系と違って今すぐこの場で出来るから実践実践♪

スポンサーリンク
スポンサーリンク

[]
カッコの中に入った文字のどれか(1文字)

例)
今日は正規表現を学びます。
正規表現を覚えると便利ですよ。
ビバ!正規表現

検索文字:[をは]

今日正規表現学びます。
正規表現覚えると便利ですよ。
ビバ!正規表現

まぁこんな風に一文字を検索することは少ないと思いますが、カッコの中は範囲にできます。

[0-9]←[0123456789]←0,1,2,3,4,5,6,7,8,9
[A-Za-z]←[ABCDEFGH…XYZabcdefgh…xyz]←A~Z,a~z
[^0-9]←数字以外(先頭の^とは違います。先頭の数字以外を検索したいときは^[^0-9])
[0-9]←[0123456789]←分かりにくいですが全角の数字です。記号の”[]”と”-“は半角で書きます。

2桁の数字なら[0-9][0-9]って表すことが出来ます。数字は[0-9]って書くと言うのだけでも覚えておいてください。
[0-9][0-9]→00~99(2桁の数字)
[0-9][0-9][0-9]→000~999(3桁の数字)

例)
美里地区人口
年齢 男性 女性
00歳 125 115
10代 158 159
20代 184 178
30代 201 181
40代 185 184
50代 261 280
60代 328 337
70代 225 303
80代 148 224
90代 18 56

検索文字:[0-9][0-9][0-9]

美里地区人口
年齢 男性 女性
00歳 125 115
10代 158 159
20代 184 178
30代 201 181
40代 185 184
50代 261 280
60代 328 337
70代 225 303
80代 148 224
90代 18 56

3桁の数字が検索されました。

やってみよう)
例)
美里地区人口
年齢 男性 女性
00歳 125 115
10代 158 159
20代 184 178
30代 201 181
40代 185 184
50代 261 280
60代 328 337
70代 225 303
80代 148 224
90代 18 56

検索文字:[0-9][0-9][0-9]
置換文字:3桁

やってみよう)
例)
美里地区人口
年齢 男性 女性
00歳 125 115
10代 158 159
20代 184 178
30代 201 181
40代 185 184
50代 261 280
60代 328 337
70代 225 303
80代 148 224
90代 18 56

検索文字:[0-9][0-9][歳代]
置換文字:★

.
とにかくなんでもいい1文字
(改行は除く)

.はオールマイティー。何にでもなってくれます。この記号はよく使います。

例)
今日はパソコンを学びます。
今日はけすことを学びます。
今日はfacebookを学びます。

検索文字:今日は....を学びます。

今日はパソコンを学びます。
今日はけすことを学びます。
今日はfacebookを学びます。

例の.は4つなので4文字って意味になります。オールマイティーなので、「今日は」と「を学びます」に はさまれた4文字のものは何でも検索されます。4文字を検索したので8文字の「facebook」は検索されませんでした(後々同じ話が出てくるので、検索されなかったことを覚えておいてください)

やってみよう)
例)
今日はパソコンを学びます。
今日はけすことを学びます。
今日はfacebookを学びます。

検索文字:今日は....を学びます。
置換文字:今日は( )を学びます。

{}
直前の文字の回数を指定

[0-9]{2}  2桁の数字([0-9][0-9]と一緒の意味です)
[A-Za-z]{2,}  2文字以上の英字
[0-9]{5,15} 5~15桁の数字

こんな風に回数を指定することができます。

数字はもちろんですが、先に挙げた.を使うことによって、○文字以上の行を検索とかもできます。

検索文字:^.{10,}
置換文字:

検索:”先頭(^)”から”何でも良い文字(.)”が”10以上({10,})”ある場合→置換:消す
これで1行が10文字以上ある行は消えます。

例)
美里地区人口
年齢 男性 女性
00歳 125 115
10代 158 159
20代 184 178
30代 201 181
40代 185 184
50代 261 280
60代 328 337
70代 225 303
80代 148 224
90代 18 56

検索文字:[0-9]{2}

美里地区人口
年齢 男性 女性
00125 115
10158 159
20184 178
30201 181
40185 184
50261 280
60328 337
70225 303
80148 224
9018 56

これやと3桁の数字も2桁分引っかかっちゃいますね。2文字続く数字を検索したので間違ってはいないのですが、できれば2桁のものだけ引っかかって欲しいものです。そんな時はこれを使います。

\b
単語区切り

検索文字:\b[0-9]{2}\b

注:日本語の区切りには使えないことが多い(数字が全角とか、ひらがなと漢字の場合は区切られない)

美里地区人口
年齢 男性 女性
00歳 125 115
10代 158 159
20代 184 178
30代 201 181
40代 185 184
50代 261 280
60代 328 337
70代 225 303
80代 148 224
9018 56

良い感じになりました。

やってみよう)
例)
美里地区人口
年齢 男性 女性
00歳 125 115
10代 158 159
20代 184 178
30代 201 181
40代 185 184
50代 261 280
60代 328 337
70代 225 303
80代 148 224
90代 18 56

検索文字:[0-9]{2}
置換文字:■■

やってみよう)
例)
美里地区人口
年齢 男性 女性
00歳 125 115
10代 158 159
20代 184 178
30代 201 181
40代 185 184
50代 261 280
60代 328 337
70代 225 303
80代 148 224
90代 18 56

検索文字:[0-9]{2,}
置換文字:■■★

やってみよう)
例)
美里地区人口
年齢 男性 女性
00歳 125 115
10代 158 159
20代 184 178
30代 201 181
40代 185 184
50代 261 280
60代 328 337
70代 225 303
80代 148 224
90代 18 56

検索文字:\b[0-9]{2}\b
置換文字:■■

?
直前の文字があってもなくてもいい

ワープロとかやと、”表現のゆれ”とかで自動的に出てきたりしますよね。

例)
コンピュータ
コンピューター

検索文字:コンピューター?

コンピュータ
コンピューター

やってみよう)
例)
Windows 7のコンピュータを使っている
Windows7のコンピューターを使っている

検索文字:Windows ?7
置換文字:Windows7

検索文字:コンピューター?
置換文字:コンピュータ

注意点
ここまで”.”やら”?”やら色んな記号が出てきたけど“.”って文字自身を検索したい場合はどうすりゃええんやろ?
そんな時は\を付けます。

例)
今日は....駄目だ
今日は腹ペコで駄目だ

検索文字:今日は....駄目だ$

今日は....駄目だ
今日は腹ペコで駄目だ

検索文字:今日は\.\.\.\.駄目だ$

今日は....駄目だ
今日は腹ペコで駄目だ

1つ目の例やと任意の4文字が検索されましたが、\.とすることによって”….”が検索されました。
他にも\?、\[,\\ …など、正規表現で使う記号の前に\を付けると目に見えてるほうの字が検索されます。

*
直前の文字があってもなくてもいいし、ずっと続いててもいい

「あっても」は想像できるけど、同時に無くても良いなんか検索すること無いよなぁと思いませんか?
最初僕もそう思ってましたが、他の記号を組み合わせることによってコレが結構便利に使えます。

例)
あっ
あたっ
あたたっ
あたたたたたっ
あたたたたたたたたたたたたたたたたたたたたたたたたたっ

検索文字:あた*っ

あっ
あたっ
あたたっ
あたたたたたっ
あたたたたたたたたたたたたたたたたたたたたたたたたたっ 

全部引っかかる

まぁこんな風に「た」が”あっても無くても”なんて探すことはほとんど無いと思うのですが、個人的には”なんでも”の.と組み合わせて良く使います。

例えば、「ほげほげ」含んだ行を消したい場合。

例)
ほげほげです。
いっつもほげほげです。
昨日はほげほげ

単に、
検索文字:ほげほげ
置換文字:★
やと、

★です。
いっつも★です。
昨日は★

となります。

次に、
検索文字:ほげほげ.*
置換文字:★
やと、

ほげほげです。
いっつもほげほげです。
昨日はほげほげ 

と検索され、

★
いっつも★
昨日は★

になります。

“ほげほげ”の後ろに文字があっても無くても検索されてますよね。

検索文字:.*ほげほげ.*
置換文字:★

★
★
★

こうする事によって、行頭や行末に「ほげほげ」がある場合など、”ほげほげ”の前後に文字があっても無くても、見つけることができ、行を消すことができます。

+
直前の文字が1回以上

例)
あっ
あたっ
あたたっ
あたたたたたっ
あたたたたたたたたたたたたたたたたたたたたたたたたたっ

検索文字:あた+っ

あっ
あたっ
あたたっ
あたたたたたっ
あたたたたたたたたたたたたたたたたたたたたたたたたたっ 

2行目から検索に合致する

1つ前と同様、例のように固定文字の連続を検索する事は少ないですが、最初に出てきた、[0-9]や”.”なんかと組み合わせると良い感じになります。

例)
今日はパソコンを学びます。
今日はけすことを学びます。
今日はfacebookを学びます。

検索文字:今日は.+を学びます。

今日はパソコンを学びます。
今日はけすことを学びます。
今日はfacebookを学びます。

上記”.”の時は4文字固定やったけど、これで8文字のfacebookも検索されるようになりました。

やってみよう)
例)
あっ
あたっ
あたたっ
あたたたたたっ
あたたたたたたたたたたたたたたたたたたたたたたたたたっ

検索文字:あた*っ
置換文字:おまえはもう...

やってみよう)
例)
あっ
あたっ
あたたっ
あたたたたたっ
あたたたたたたたたたたたたたたたたたたたたたたたたたっ

検索文字:あた+っ
置換文字:おまえはもう...

やってみよう)
例)
今日はパソコンを学びます。
今日はけすことを学びます。
今日はfacebookを学びます。

検索文字:今日は.+を学びます。
置換文字:今日は( )を学びます。

やってみよう)
例)
今日はパソコンを学びます。
今日はけすことを学びます。
今日はfacebookを学びます。

検索文字:.*けすこと.*
置換文字:★

注意点
*、+のあとにつける”?”

今日は津市美里町で講演です。美里町は津市の中でもちょっとだけ涼しいよ。

こんな文章があって、津市○○町(○○は何が入るか分からない)を検索したいなぁと思ったとき、
検索文字:津市.+町
ってしちゃうと、

今日は津市美里町で講演です。美里町は津市の中でもちょっとだけ涼しいよ。

となってしまいます。

正規表現では条件にあった物を一番長く検索しようとしますので、こんなときは、「よくばりでない」”?”(直前の文字があってもなくてもいい?と一緒やけど、ここでは違うということになってる)をつけてあげると直近のものに変わります。

今日は津市美里町で講演です。美里町は津市の中でもちょっとだけ涼しいよ。

検索文字:津市.+?町

今日は津市美里町で講演です。美里町は津市の中でもちょっとだけ涼しいよ。

()
ひとくくりにする
|
若しくは

あと2つで終わりです。もう少しだけ頑張ってください。
ここまで紹介した記号は1文字を対象にしたもんやったけど、これでひとくくりにできます。

例)
ゴクゴク飲む
ゴクゴクゴクっと飲む
ゴクゴクゴクゴクっと飲む

検索文字:(ゴク)+

ゴクゴク飲む
ゴクゴクゴクっと飲む
ゴクゴクゴクゴクっと飲む

あんまりこんなことしないね…

例)
今日はパソコンを学びます。
今日はけすことを学びます。
今日はfacebookを学びます。
明日もパソコンを学びます。
検索文字:(パソコン|facebook)を学びます。

今日はパソコンを学びます。
今日はけすことを学びます。
今日はfacebookを学びます。
明日もパソコンを学びます。

複数の文字を一度に検索することができます。ブラウザで正規表現のプラグインとか入れるとこんな風に検索できたりします。

例)
今日はパソコンを学びます。
今日はけすことを学びます。
今日はfacebookを学びます。
明日もパソコンを学びます。

検索文字:(今日|明日)(は|も)

今日はパソコンを学びます。
今日はけすことを学びます。
今日はfacebookを学びます。
明日もパソコンを学びます。

今日は、今日も、明日は、明日も が検索されます。

結婚式などのイベントで色んな人が取ったデジカメデータをまとめなあかん…時とかあったりしますかね。
そんな時今回の記号が使えます。

例)
IMG0001.jpg
DSC0012.jpg
R00034.jpg

検索文字:(IMG|DSC|R)
置換文字:KIP0820_

正規表現が使えるファイル名変更ソフトを使用すると、こんな風に複数メーカーのデジカメデータを統一するのに便利やったりします。

やってみよう)
例)
今日はパソコンを学びます。
今日はけすことを学びます。
今日はfacebookを学びます。
明日もパソコンを学びます。

検索文字:(今日|明日)(は|も)
置換文字:明後日は

() \1,\2,\3…
ひとくくりにした奴をおぼえる

これで最後。これは非常に便利です。

ここまで来たら正規表現本来の意味である「文章を記号で表現する」が何となく分かってくると思います。分かってきたらこの機能が凄く便利に使えます。

慣れるまでピンと来ないかもしれませんが、

1.検索したいキーワードを考える
2.それをカッコでくくる(保存される)
3.\数字で取り出すことができる

ってしてみて下さい。

例えば、

今日は晴れです。
今日は曇りです。
今日は雪です。

の天気の部分(晴れ、曇り、雪)を検索したい場合、

検索文字:今日は.+です。

と書くことができ(”今日は”と”です”挟まれた、任意の文字が一文字以上のもの)、

今日は晴れです。
今日は曇りです。
今日はです。

な風に検索されますよね。

これをカッコでくくると、.+の部分が置換時に\1って文字で使えるのです。

検索文字:今日は(.+)です。
置換文字:今日は\1です。\1は好きですよ。

今日は晴れです。晴れは好きですよ。
今日は曇りです。曇りは好きですよ。
今日は雪です。雪は好きですよ。

左から順に一つめにカッコをつけて検索された物が\1、その次にカッコをつけて検索された物が\2…という風に使えます。

たとえば列を入れ替えたり….

例)
美里地区人口
年齢 男性 女性
00歳 125 115
10代 158 159
20代 184 178
30代 201 181
40代 185 184
50代 261 280
60代 328 337
70代 225 303
80代 148 224
90代 18 56

検索文字:(.+)\t(.+)\t(.+)
置換文字:\2 \3 \1

美里地区人口
男性 女性 年齢
125 115 00歳
158 159 10代
184 178 20代
201 181 30代
185 184 40代
261 280 50代
328 337 60代
225 303 70代
148 224 80代
18 56 90代

1つめの列が\1、2つめが\2として置換に使えるので、男性 女性 年齢の順に変わりました。
これならExcelの方が簡単にできるって?はい。Excelが便利ならExcelで良いと思います。適材適所で使っていきましょう。

間に何か はさんだり….

例)
郵便番号
0300846
5140000
6780250
6300134
9200273
9012114

検索文字:([0-9]{3})([0-9]{4})
置換文字:\1-\2

030-0846
514-0000
678-0250
630-0134
920-0273
901-2114

こんな風に7桁の数字を3桁、4桁に別けることが出来ます。

一番最初に20120820を2012-08-20に変えたいって書いてあったの覚えてますか?
これを使ってできます。

検索文字:([0-9]{4})([0-9]{2})([0-9]{2})
置換文字:\1-\2-\3

2012→4桁の数字→([0-9]{4})
08→2桁の数字→([0-9]{2})
20→2桁の数字→([0-9]{2})

8月1日を8/1に変えるのも同様に、
検索文字:([0-9]{1,2})月([0-9]{1,2})日
置換文字:\1/\2

[0-9]{1,2}月→1桁か2桁の数字+月
[0-9]{1,2}日→1桁か2桁の数字+日

ってできますよね

やってみよう)
例)
美里地区人口
年齢	男性	女性
00歳	125	115
10代	158	159
20代	184	178
30代	201	181
40代	185	184
50代	261	280
60代	328	337
70代	225	303
80代	148	224
90代	18	56

検索文字:(.+)\t(.+)\t(.+)
置換文字:\3\t\2\t\1

やってみよう)
例)
郵便番号
0300846
5140000
6780250
6300134
9200273
9012114

検索文字:([0-9]{3})([0-9]{4})
置換文字:\1-\2

自己学習の為のサイトの紹介

文章読むより映像のが頭に入るとか、もう少し手を動かして身につけたいという方は下記のページがお勧めです。

■正規表現の基礎を動画で学ぶ
ドットインストール
http://dotinstall.com/lessons/basic_regexp

■正規表現をブラウザで試しながら学べる
手を動かしながら覚える正規表現<基礎入門編>
http://books.ivory.ne.jp/regexp/

手を動かしながら覚える正規表現<置換処理編>
http://books.ivory.ne.jp/regexp/replace.html

資料

正規表現の一覧表
http://www.textdrop.net/doc/regular-expressions-cheat-sheet-ja/

正規表現を使えるソフトの紹介

正規表現が使えるエディタ

Windows
秀丸エディタ(有料)
http://hide.maruo.co.jp/software/hidemaru.html

EmEditorFree
http://jp.emeditor.com/modules/download2/rewrite/tc_5.html

Mac
CotEditor
http://sourceforge.jp/projects/coteditor/

iText Express
http://itunes.apple.com/jp/app/itext-express/id416550249?mt=12

Android
Jota Text Editor
https://play.google.com/store/apps/details?id=jp.sblo.pandora.jota&hl=ja

iPhone
iText Pad(有料)

正規表現が使えるソフトやツール

Microsoft Word(ワイルドカード)
方言がきつい(今回紹介した機能はあるが、記号が違う)です。
http://office.microsoft.com/ja-jp/word-help/HA102350661.aspx

Adobe Bridge (画像管理ソフト/ファイル名の変換)

Excel用正規表現検索ダイアログアドイン
http://srcedit.pekori.jp/tool/excelre.html

Flexible Renamer (ファイル名の変換/Windows)
http://hp.vector.co.jp/authors/VA014830/FlexRena/

Regular Expression Search (google chrome ページ内検索)
https://chrome.google.com/webstore/detail/haocppnjhmfiemhgfdgockbipphbfibe?hl=ja
などなど…

まとめ

最初は苦いビールも飲み続けるとやめられんくなりますよって話

お仕事情報下さい

えー。最後に大事なこと!
もやし工房ではお仕事募集してます。フリーランスでサーバ管理の仕事がしたいけど、そんな需要が東海地方の何処にあるのかが分からない状態。こんな感じの講演して欲しいってのでも喜んで! 何やら話でも聞いてみたいってかたいらっしゃいましたら、是非 お便り下さい。よろしくお願いします。

コメント

タイトルとURLをコピーしました