C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 76 を表示中)
■44659 / )  Re[1]: VBの置換について。ひとつだけ置換は・・・できない??
□投稿者/ 魔界の仮面弁士 (1419回)-(2009/12/15(Tue) 09:30:22)
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, "あれ", "これ"))
返信 編集キー/


管理者用

- Child Tree -