| 魔界の仮面弁士さん ありがとうございます。
MSDNも眺めたのですが、Count:= でなんばんめ、というのが取れるのを読み取れませんでした・・・
> Start:=x で、検索開始位置を調整することもできます。
そんなこともできるんですね。これも使えそうですね。
> Function(sz) If(Interlocked.Add(n, 1) = 3
これがちょっとどういう意味かわからないので、もうすこしじっくり見させていただきたいと思います。
とっても、感謝です。とりあえず、なんとか出来そうです!!
■No44659 (魔界の仮面弁士 さん) に返信 > 2009/12/15(Tue) 10:09:41 編集(投稿者) > > ■No44652 (やまり さん) に返信 >>しかし、VBのreplaceは「すべてを置換」してしまうのですね・・・ >>・マッチした文字列一つ目だけを置換、はできないのでしょうか? > Dim Src As String = "これとこれとこれとこれ" > Dim Ret As String = Replace(Src, "これ", "あれ", Count:=1) > とすれば、1 つだけ置換もできますよ。 > Start:=x で、検索開始位置を調整することもできます。 > > 3 つ目だけを置換したいなら、 > Ret = Replace(Replace(Src, "これ", "あれ", Count:=3), "あれ", "これ", Count:=2) > とか。汎用的ではありませんし、文字列によっては使えませんけれども。 > > 汎用的にするなら、gtk2k さんの方法かな。 > > > ■No44653 (やまり さん) に返信 >>できればもっとシンプルに「○番目のマッチを置換」みたいなことができるとうれしいのですが。。。 > その前に、マッチする文字列が○個以上存在するかをチェックする必要がありそうですね。 > 事前チェック無しで良いなら、こういう書き方も出来ますけれども。(VB2008) > > 'Imports System.Threading > 'Imports System.Text.RegularExpressions > > '3個目の「これ」を「あれ」にする。 > Dim n As Integer = 0 '置換回数カウント用 > Dim ret As String = Regex.Replace("これとこれとこれとこれ", "これ", Function(sz) If(Interlocked.Add(n, 1) = 3, "あれ", "これ")) |