|
こんにちは。秀丸愛用者の「でるもんた・いいじま」です。
私ならシンプルに
・カギカッコでくくった曲名
・"(唄)誰それ"
の部分を残して、それ以外の余計な情報(この例であれば楽器奏者の列挙、曲の長さ、
CDの型番)をreplaceallfastで除去する、という方法を採ります。
というわけで、作ってみました。
- - - - キリトリセン - - - -
setcompatiblemode 0x20000; //これはもう決まり文句です
if ( !selecting ) selectall;
//マクロ完成後は下の1行を有効にすると便利です
//disabledraw; begingroupundo;
// 動作確認のために ask をつけてあります。確認が取れたら削ってください。
replaceallfast @"\s*<[-A-Za-z0-9]+>", "", inselect, regular, ask;
replaceallfast @"\s*((\d+分)?(\d+秒))", "", inselect, regular, ask;
replaceallfast @"\s*(?<=」.*)([^唄].*?)[^(\n]+", "", inselect, regular, ask;
//上記の「マクロ完成後は…」を有効にする時は同時に下の1行も有効にします。
//endgroupundo; enabledraw;
endmacro;
- - - - キリトリセン - - - -
まず前提として、本文中
・CDの型番の<>、曲名のカギカッコ、「(12分34秒)」「(唄)」「(三味線)」
などの丸括弧は全角
・型番のデータと、演奏時間の数字は半角
としています。もしそうなっていないデータを扱う可能性がある場合は、追加のコー
ドを書きますのでご用命ください。
最初のreplaceallで、型番のデータを取り除きます。
次のreplaceallは演奏時間の情報です。
3つめがカギです。
"(?<=」.*)" は「"」" があり、それに引き続いて何か文字列があるかもしれない(が、
何もないかもしれない)」という意味です。
"([^唄].*?)" は、全角の括弧で囲まれたテキストで、左括弧の直後の文字が "唄"
ではないもの、という意味です。
..*? と .* の違いはhmjre.dllのヘルプや、一般の正規表現解説資料などでご確認く
ださい。
そのあと "[^(\n]+" とすることで、次の "(**)" の直前までをヒット対象にし
ます。
なお、[…] の中に \n も入れておかないと、行末の改行文字が削除されてしまうの
で注意が必要です。・
とりあえずこれで、示していただいたデータはうまく処理できることを確認済みです。
---- Original Message ----
> 「大漁唄い込み(斎太郎節・遠島甚句)」(唄)原田直之(2分42秒)<K30X218>
> 「秋田音頭」(演奏)滞空時間(2分53秒)<NESIA5>
> 「ラーガ・メグ・マルハール」(津軽三味線)上妻宏光(タブラ)U-zhaan(シ
>タール)ヨシダダイキチ(3分04秒)<COCQ-85037>
> 「三春甚句」(唄)福本えみ(三味線)西英輔、上原潤之助(笛)佃康史(鳴物)
>美鵬直三朗、美鵬マミ(はやし詞)新津幸子、新津美恵子(3分43秒)
> 「会津松坂」(唄)福本えみ(尺八)佃康史(はやし詞)新津幸子(3分04秒)
> 「秋田おばこ」(唄)福本えみ(津軽三味線)小山貢(尺八)佃康史(鳴物)美鵬
>直三朗、美鵬マミ(はやし詞)新津幸子、新津美恵子(3分34秒)
>
> 下のように整形したいのです。行末の「(唄)****」は残したいんですが、解
>法を思いつかないので( ! を使う?)保留しました。
>
> 「大漁唄い込み(斎太郎節・遠島甚句)」
> 「秋田音頭」
> 「ラーガ・メグ・マルハール」
> 「三春甚句」
> 「会津松坂」
> 「秋田おばこ」
|
|