正規表現(文字列置換,変数n個)を作ってみた
「正規表現(文字列置換)」、わたし史上空前のスマッシュヒット中です。
正規表現(文字列置換)
https://winactor.biz/library/2021/06/30_4250.html
みなさん、使ってますか?
複数の変数に一括適用したいニーズがあり、改造してみました。
「正規表現(文字列置換,変数n個)」です。
加工箇所が10行以内なので、わたしでも何とかなりました。
1ライブラリ内で済ます造りは、このへんの説明にもある通り、効率(≒速度)の面で有利です。
加工手順
「ブラウザ操作(値の設定,3つ)」のスマートな造り(サブルーチン/関数のスタイル)を準用しました。
- 変数宣言とSubの間にこの行を好きなだけ挿入(変数の末尾は連番)
SetUmsVariable $置換結果1$, RegReplace(!文字列1!) - Sub Main()をFunction RegReplace(strString)とする
結びもEnd SubをEnd Functionとする - ボディのスクリプトから$置換結果$の行をコメントアウト
- 文字列を設定してください。のIf~End Ifを、On Error Resume NextとOn Error Goto 0で囲む
- strRtn =をRegReplace =に変更
実務で使用中の組み合わせ
- 値の一括取得 ← チカラワザ
https://winactor.com/questions/question/指定xpath一括処理を作ってみた/ - 正規表現(文字列置換,変数n個)
- ※ そのうち、1ライブラリ化を目指すかも
最近のいくつかのスレッドでも使えそうと感じました。
あとでこの辺りにリンクを追加しておこうと思います。
設定例
- 文字列1、置換結果1:同じ変数名をセット
- 正規表現パターン:値⇒<(".*?"|'.*?'|[^'"])*?>
- 置換文字列:値⇒(ブランク)
これで各変数の値からHTMLタグを除去してます。
- ※「値の一括取得」でXPath表記に工夫を凝らしているものの、内側にはめ込まれる要素が一定でなく、バリエーションを網羅するのが困難で、値だけをビッタビタに取ることは難しい
ポテンシャル
きっとこのへんにも同じ要領で適用できると踏んでます。
正規表現(文字列抽出)
https://winactor.biz/library/2021/03/12_3788.html
正規表現(文字列存在確認)
https://winactor.biz/library/2021/06/30_4253.html
惜しいポイント
一括処理になって、機能は申し分ないものの、実際は、いまいちスマートになり切れてないポイントがいくつかあります。
- 設定タブでの表示順序が逆のほうが自然
- どうせ同じ変数名をセットするなら、設定タブに表示するのはどちらかだけにしたい
- 使わない文字列n以降があると、「文字列を設定してください。」となる
- なぜか XPath = "" 「文字列を~ みたいな表記、、
ライブラリ単体ではXPathとは無縁のはずなのに、、 - 使わない文字列n以降は、ダミー変数[テスト]とした
- 「ブラウザ操作(値の設定,3つ)」に倣って、使わない分はスクリプトでコメントアウトしたほうが統一感があって良いのかも
- なぜか XPath = "" 「文字列を~ みたいな表記、、
ヒント、アイデアをいただければ幸いです。
- わたしならこうする
- こうしたらもっとバランスが良くなりそう
以下、未テストもしくは未解明です。
もっとテストを重ねますが、ズバリをご存知だったり、実感をお持ちでしたら、教えてください。
- 置換用のメタ文字が使えた試しがない
このへんの置換のくだりです。
利用可能な正規表現 - サクラエディタ
https://sakura-editor.github.io/help/HLP000089.html置換で使える参照
基本的な正規表現一覧 | murashun.jp
https://murashun.jp/article/programming/regular-expression.html置換文字列で使える正規表現
正規表現サンプル集 - メガソフト
https://www.megasoft.co.jp/mifes/seiki/meta.html置換用メタ文字
同じRegExpを使うVBAの置き換えでは$1とかが使える模様。
VBAで正規表現を利用する(RegExp)|VBA技術解説
https://excel-ubara.com/excelvba4/EXCEL232.html#sec08Replaceの使用例
$numberのキャプチャグループ
※ 時間を見つけてテスト次第、更新予定
ここも同じ課題があります。