カレンダーの色分けを正規表現で

[9055]カレンダーの色分けを正規表現で 投稿者:迷人 投稿日:2016/11/28 11:35:01
よろしくお願いします。
内容は表題の通りで、黒(平日)青(土曜)赤(日曜)の3色の文字スタイルを準備し
文字フレームに数字を流し込んだら自動的に色分けをしてくれる正規表現に悩んでいます。
祝日は不規則になるので、あとで手作業で設定することにします。

2017年1月を例にすると、1月1日が赤で、その後8日、15日…となります。
1月7日、14日…が青。それ以外は黒です。
文字の基本色を黒にし、日曜日と土曜日を色分けします。

まず、タブ区切りのテキストを流し込みます。
[tab]1[tab]2[tab]3[tab]4[tab]5[tab]6[tab]7[cr]
[tab]8[tab]9[tab]10[tab]11[tab]12[tab]13[tab]14[cr]
[tab]15[tab]16…
まず日曜日ですが ^\t\d+ で合っていると思います。実際正しく機能しています。
私が手こずっているのは土曜日です。ここを「強制改行」「改段」「任意の改行」など
あれこれ試してドツボにはまってしまいました。

今のところ \t\d+\r としていますが、これでは月末日が土曜日に来た時に青になりません。
無意味な改行コードを入れれば青になりますが、文字フレームを大きく取らないと
オーバーセットテキストになりますし、できればもっとスマートな方法を知りたいです。

\rではなく「段落の終わり」にすると31日が火曜日でも青になってしまいます。

上で[cr]としましたが私が改行改段について理解が足りないのが原因かもしれません。
ある程度まで自動処理で済ませ、部分的に手作業で補うことも考えてはいますが…
どうかご教示いただければ幸いです。
[9056]Re: カレンダーの色分けを正規表現で 投稿者:お~まち 投稿日:2016/11/28 12:51:59
「行末の直前の数字文字列」で指定するから2パターン発生してしまうわけですね。
これを行末から数えるのではなくて、先頭から数える方法にすると1パターンで済みませんか。
つまり「7つ目のタブから行末まで」を指定するとどうですか。
[9057]Re: カレンダーの色分けを正規表現で 投稿者:お~まち 投稿日:2016/11/28 13:27:39
すみません。取り消します。先読みの中に繰り返しを入れられませんでした。
(?<=(\t\d+){6,6}\t)\d+
↑これ、できません。(?<= ... )の中に+,*,{}などの繰り返し命令は拒否されました。
[9058]Re: カレンダーの色分けを正規表現で 投稿者:お~まち 投稿日:2016/11/28 13:31:00
また訂正。先読みではなくて後読みです。
[9059]Re: カレンダーの色分けを正規表現で 投稿者:たう 投稿日:2016/11/28 15:25:08
>\rではなく「段落の終わり」にすると31日が火曜日でも青になってしまいます。

火曜日の後にタブを加えたらどうでしょう?
1週目の数字がないところもタブで埋めるのでしょうし、全行タブ7つに統一すればなんとなくスマートな感じです
[9060]Re: カレンダーの色分けを正規表現で 投稿者:迷人 投稿日:2016/11/28 15:26:11
>お~まち様
早々にレス下さいましてありがとうございます。
残念ながら (?<=(\t\d+){6,6}\t)\d+ は機能しませんでした。
私も我流で悪戦苦闘していて、例えば基本の文字色を青にして
月~金を黒にするという方法も考えてみたのですが
元来正規表現に拙いものですから思った通りに行きません。
もう少し頑張ってみます。
[9061]Re: カレンダーの色分けを正規表現で 投稿者:迷人 投稿日:2016/11/28 15:57:59
>たう様
「段落の終わり」で自分の案はシンプルに2つあって

\t\d+\r
これだと晦日が土曜日の場合適用されず(タブを加えるとオーバーセット)

\t\d+$
こちらで晦日を青にしつつ
> 「段落の終わり」にすると31日が火曜日でも青
の新たな問題が発生します。

たう様ご推察の通り、一週目の空きにもタブを入れますし、
晦日が月~金になった際には最後にタブを入れれば解決できました。
かなり前進しました。余計なタブはご愛敬として、このまま進めようと思います。

本当であれば流し込むテキストは改行を入れず、1~晦日までタブと数字のみで
やっていたのですが、複数行/単一行と行頭の関係が把握し切れていなかったので断念しています。
これが片付いたら、来年に向けて勉強してきます。
ありがとうございました。
この記事の書き込み元へのリンク (コメントや質問などはこちらへどうぞ)

このページをシェア