RegEx.Replaceでマッチした値を関数で変換したものを置換するには?

解決


ポター  2009-07-13 07:58:17  No: 142211

RegEx.Replaceで、次のような置換を行いたい場合にはどうすればよいでしょうか?

(ケース1)
  パターン="\d+"
  置換したい文字=パターンにマッチした値を、作成した関数を使って変換した文字列で置換
  (例えば、Function Hogehoge(Byval sVal as String) As Stringという関数があるとします。
  置換元の文字列が"abc123defg"の場合、マッチするのは"123"になると思うのですが、
  "123"の部分をHogehoge("123")で置換したいのです。)

(ケース2)
  パターン="\s+(\d+)\s*"
  置換したい文字=パターンにマッチした値の()で囲まれた部分を、作成した関数を使って変換した文字列で置換
  (例えば、置換元の文字列が"123 4567  bbb"の場合、マッチするのは" 4567  "になると思うのですが、
  "4567"の部分をHogehoge("4567")で置換したいのです。)

よろしくお願いします。


ポター  2009-07-13 08:01:51  No: 142212

VBのバージョンはVB2008 Express Editionです。
申し訳ございません。


Hongliang  2009-07-13 08:35:47  No: 142213

Regex.Replace メソッド
http://msdn.microsoft.com/ja-jp/library/system.text.regularexpressions.regex.replace.aspx
のうち、MatchEvaluator を引数に取るものを使用すれば、マッチするごとに任意のメソッド(ただし引数が Match 型一つ、返値が String のもの)が呼び出されます。その中で好きに変換処理を実装できます。
実際の使い方は上記のリンク先のサンプルコードや、MatchEvaluator で WEB 検索したりしてください。


ポター  2009-07-13 18:58:34  No: 142214

Hongliang様、ありがとうございました。
ケース1については、上記の方法でできそうですので、いろいろとトライしてみます。
ケース2については、ちょうど以下の質問がありましたので、これを応用すればできそうですね。
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200906/09060030.txt
ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加