2021年4月16日

Excel VBA Diaryさんの正規表現クイズ

自分用にまとめました。
5
リンク あらびき日記 正規表現の先読み・後読みを極める! 柔軟性の高い正規表現を書こうとすると,避けて通れないのが先読み・後読みです. 先読み・後読みに関して,いままではとりあえず的な理解をしていたのですが,それだと説明できない正規表現に遭遇したので,説明できるまで理解を深めてみました. 73 users
リンク Let'sプログラミング 先読みと後読みを使ったパターン 正規表現ではパターンが対象の文字列とマッチするかどうかをチェックしますが、先読みや後読みでは文字列とマッチするかどうかは調べるけれどマッチした文字列としては取得しません。先読みと後読みでは利用方法に応じて、肯定先読み、否定先読み、肯定後読み、否定後読み、の 4 種類が利用できます。ここでは正規表現における先読みと後読みを使ったパターンの利用方法について解説します。 3 users
Excel VBA Diary @excelvba_diary

#正規表現クイズ (?:^ササ|)(.{4})(?=\1|$) のフレーズで一世を風靡したコントグループの名前は?

2021-03-26 13:32:09
Excel VBA Diary @excelvba_diary

解答です。期待値は「コント赤信号」、フレーズは「ササニーシキニーシキニーシキ」です。実はこれにマッチする文字列は多すぎて列挙できませんが問題の縛りから絞り込むという考えになります。(?=~)の肯定先読みと\1の前方参照の組合せから繰り返しが想像できます。全体マッチなら^ササ(.{4})+で十分 twitter.com/excelvba_diary… pic.twitter.com/fthKvsBnlk

2021-03-26 18:03:45
拡大
拡大
Excel VBA Diary @excelvba_diary

正規表現クイズはやや凝りすぎた感がありました(反省)素直に、IsMatch関数でTrue, Falseとなるような正規表現パターンがクイズに向いていると思いました。次回クイズまで少しお時間を下さい。

2021-03-26 20:16:22
Excel VBA Diary @excelvba_diary

#正規表現クイズ ルールを決めました。画像の関数を使いマッチング判定を行います。出題はTextまたはPatternを示して他方を当てるという形式。では練習問題。 \d{2}\.\d{3}[a-z]{2} このPatternはオリンピック正式種目の距離を示しています。さて、一致するTextの文字列とその種目は何でしょうか? pic.twitter.com/24r6ECSEuA

2021-03-29 17:20:13
拡大
Excel VBA Diary @excelvba_diary

#正規表現クイズ (練習問題解答) 答え、文字列は 42.195km で、種目はマラソン。こんな感じで不定期に出していきたいと思います。クイズNo.1 は明日(3/30)の朝を予定しています。 twitter.com/excelvba_diary…

2021-03-29 20:02:50
Excel VBA Diary @excelvba_diary

#正規表現クイズ (No.1) 第1回目は軽い問題です。他の方の思考時間ため回答解禁時刻は本日15:00とします。引用ツイートで回答して下さい。一致判定は画像の関数を使います。 [A-Z]\d-[A-Z]\d [A-Z]-\d[A-Z]{2} このコンビが大活躍する映画のタイトルは何でしょうか? pic.twitter.com/SutdViOKt6

2021-03-30 05:54:25
拡大
Excel VBA Diary @excelvba_diary

#正規表現クイズ (No.1) 解答 答えはスターウォーズ。これは簡単ですね。正規表現の中でも、[A-Z ]や\dなどの文字クラスは基本中の基本。{n} は量指定子と呼び、直前の要素とちょうどn回の一致になります。これも基本です。次回のクイズは明日(3/31)の朝です。だんだん難しくなります。 twitter.com/excelvba_diary… pic.twitter.com/b8ZV0Qq33P

2021-03-30 19:46:26
拡大
Excel VBA Diary @excelvba_diary

#正規表現クイズ (No.2) ([\u3041-\u309F]+)\1[\u4E00-\u9FFF] まだまだ健在、老舗のフランチャイズチェーン店と言えば何? 他の方の思考時間ため回答解禁時刻は本日15:00とします。引用ツイートで回答して下さい。一致判定は画像の関数を使います。 pic.twitter.com/xaKoWRJlVi

2021-03-31 06:16:16
拡大
Excel VBA Diary @excelvba_diary

#正規表現クイズ (No.2) 解答 ほっかほっか亭、どんどん亭、など。 今回は (~) のキャプチャと \1 の後方参照(Backreferrence)を利用しました。\u はUNICODEの指定で4桁の16進数で表現します。漢字の正規表現は実は複雑で後日説明したいと思います。次回は明日(4/1)の朝に出題します。 twitter.com/excelvba_diary… pic.twitter.com/mFtoL7aCSv

2021-03-31 19:25:50
拡大
Excel VBA Diary @excelvba_diary

#正規表現クイズ (No.3) [^B-Hb-h]{4}([a-z])\s[^BbRrWw]([a-z])\2\1 文字クラスとキャプチャの総仕上げ。勘のいい人ならすぐ気付くかもしれません。ノーヒントで。他の方の思考時間のため回答解禁時刻は13:00とします。回答は引用ツイートで。一致判定は画像の関数を使います。 pic.twitter.com/IkMtzjqadK

2021-04-01 06:11:01
拡大
Excel VBA Diary @excelvba_diary

#正規表現クイズ (No.3) 解答 期待値は April fool (April Fool, april fool) 今日は4月1日。すぐにわかるかと思いましたがヒントを出すべきでした(反省)。今回は、2つのキャプチャの順番を意識する問題でした。さて次回の出題は明日(4/2)の朝です。実用性のあるクイズですので是非チャレンジを。 twitter.com/excelvba_diary… pic.twitter.com/mytSd4qrXj

2021-04-01 19:34:14
拡大
Excel VBA Diary @excelvba_diary

#正規表現クイズ (No.4) 某メーカーの製品型番の体系は、大文字英字1文字、6桁の数字、ハイフンでつながる枝番1~3桁の数字で構成されています。文字列(Text)がこの製品型番の体系に一致しているか調べるパターン(Pattern)を考えてください。一致/不一致の例は図のとおり。回答解禁時刻は15:00。 pic.twitter.com/zSfcefAhTw

2021-04-02 06:19:41
拡大
拡大
Excel VBA Diary @excelvba_diary

#正規表現クイズ で使っているIsMatchRegExp関数はワークシート関数としても使えます。正規表現の学習や練習にどうぞお使いください。 pic.twitter.com/WsHd81oWpO

2021-04-02 07:03:08
拡大
拡大
Excel VBA Diary @excelvba_diary

3桁区切りの通貨表示、VBAのIsNumeric関数は結構緩い。 IsNumeric("1,1,1") IsNumeric("1111,1111,1111") IsNumeric("1,,1") IsNumeric("1,,,") 全部Trueとなってしまう。だからアレを使いたくなる。と予告しておく。

2021-04-02 18:32:26
Excel VBA Diary @excelvba_diary

製品型番が Annnnn-n, Annnnnn-nn, Annnnnn-nnn (Aは英文字、nは任意の数字) に合致しているかを判定するのに、 If productCode Like "[A-Z]######-#" Or _ productCode Like "[A-Z]######-##" Or _ productCode Like "[A-Z]######-###" Then と書くのが面倒なら正規表現の利用を勧めたい。

2021-04-02 18:46:26
Excel VBA Diary @excelvba_diary

#正規表現クイズ (No.4) 解答 ^[A-Z]\d{6}-\d{1,3}$ ですね。^ と $ はアンカーと呼ばれるもので、文字ではなく「位置」にマッチします。利用頻度の高い正規表現の一つです。詳しくは画像を見てください。さて、次回は4/5(月)の朝に出題を予定しています。 twitter.com/excelvba_diary… pic.twitter.com/OSk5FAzlOb

2021-04-02 19:15:49
拡大
Excel VBA Diary @excelvba_diary

パターンマッチングにLike演算子が使えるなら無理に正規表現を使う必要はない。しかし、複雑なIf文構造にするくらいなら、たった一行で済む正規表現をお勧めしたい。Like演算子と正規表現は敵味方ではなく、うまく使い分ける存在。だから両方を学び、そして極める。

2021-04-03 13:21:17
Excel VBA Diary @excelvba_diary

Unicodeは2バイトという誤解がある。特に常用漢字2136字はすべて2バイトという誤解が根強い。"𠮟"と"叱"は別々の漢字で、常用漢字に登録されているのは"𠮟"。国語辞典に載っているのも"𠮟"。しかしVBAコード内に表示できない。"叱"のUnicodeはu+53F1、"𠮟"はu+20B9F。VBAで漢字を扱うのは実に面倒。

2021-04-04 07:48:23
Excel VBA Diary @excelvba_diary

"𠮟" (u+20B9F)をVBAコードの中でどう扱うかは悩ましい問題。ChrW(&H20B9F)は使えない。AscWもChrWも16bitにしか対応していないからだ。 実は16bitを超えるUnicodeはサロゲートペアで扱える。具体的には、"𠮟" (u+20B9F)の場合 s = ChrW(&HD842) & ChrW(&HDF9F) とすればよい。

2021-04-04 08:47:29
Excel VBA Diary @excelvba_diary

"𠮟"と"叱"は別々の漢字であることは既に紹介した。常用漢字である"𠮟"はVBAコード内に直接書けないが、ワークシートには書ける。問題は"𠮟"はLen関数で2を返すこと。一文字ずつ読んで処理するコードや長さを比較するコードは少し工夫が要るかもしれない。漢字を考えると気が滅入る。少し休憩する。

2021-04-04 16:43:22
Excel VBA Diary @excelvba_diary

@toshi81350036 本来のしかるは「𠮟る」です。広辞苑や大辞林などの国語辞典に書かれているのは「𠮟る」で「叱る」は書かれていません。漢和辞典では「𠮟」(しつ)、「叱」(か)と区別しています。しっせきは「𠮟責」が本来の表記ですが、実態は「叱責」が結構使われています。現状はどちらも許容されています。

2021-04-04 17:37:51
Excel VBA Diary @excelvba_diary

#正規表現クイズ (No.5) 文字列(Text)が数字または通貨表示(3桁区切り)の場合に一致、それ以外は不一致とするパターン(Pattern)を考えてください。前後に数字以外の文字が付いた場合は不一致。 判定例と使用する関数を図に示します。他の方の思考のため回答は本日15:00以降で。回答は引用ツイートで。 pic.twitter.com/j8iobjMwth

2021-04-05 06:01:08
拡大
拡大
残りを読む(87)

コメント

コメントがまだありません。感想を最初に伝えてみませんか?