4

次の形式のサブ文字列を含むかなり長い文字列があります。

project[1]/someword[1]
project[1]/someotherword[1]

文字列には、このパターンのインスタンスが約 10 個ほどあります。

私がやりたいことは、角括弧内の 2 番目の整数を別の整数に置き換えることができるようにすることです。したがって、文字列はたとえば次のようになります。

project[1]/someword[2]
project[1]/someotherword[2]

ここで必要なのは正規表現だと思います。私は正規表現を思いついた:

project\[1\]/.*\[([0-9])\]

グループ [0-9] をキャプチャする必要があるため、別のものに置き換えることができます。MSDN Regex.Replace() を見ていますが、キャプチャされた文字列の一部を選択した値に置き換える方法がわかりません。これを達成する方法についてのアドバイスをいただければ幸いです。どうもありがとう。

*編集: * @Tharwen と協力した後、アプローチを少し変更しました。ここに私が取り組んでいる新しいコードがあります:

  String yourString = String yourString = @"<element w:xpath=""/project[1]/someword[1]""/> <anothernode></anothernode> <another element w:xpath=""/project[1]/someotherword[1]""/>";
 int yourNumber = 2;
 string anotherString = string.Empty;
 anotherString = Regex.Replace(yourString, @"(?<=project\[1\]/.*\[)\d(?=\]"")", yourNumber.ToString());
4

4 に答える 4

28

一致したグループは、次のように $1, $2 構文を使用して置き換えられます:-

csharp> Regex.Replace("Meaning of life is 42", @"([^\d]*)(\d+)", "$1($2)");
"Meaning of life is (42)"

.NET の正規表現を初めて使用する場合は、http: //www.ultrapico.com/Expresso.htm をお勧めします。

また、 http://www.regular-expressions.info/dotnet.htmlには、クイック リファレンスとして役立つ情報がいくつかあります。

于 2012-07-24T13:11:56.430 に答える
2

後読みと先読みを使用して、「project [1] / xxxxx [」が前にあり、「]」が後に続く数字のみに一致するように調整しました。

(?<=project\[1\]/.*\[)\d(?=\]")

次に、次を使用できます。

String yourString = "project[1]/someword[1]";
int yourNumber = 2;
yourString = Regex.Replace(yourString, @"(?<=project\[1\]/.*\[)\d(?=\]"")", yourNumber.ToString());

Regex.Replace には、わずかに異なることを行うオーバーロードがたくさんあるため、混乱したのではないでしょうか。私はこれを使用しました。

于 2012-07-24T13:18:42.457 に答える
0

キャプチャされたグループの値を置換する前に処理する場合は、文字列のさまざまな部分を分離し、変更を加えて元に戻す必要があります。

string test = "project[1]/someword[1]\nproject[1]/someotherword[1]\n";

string result = string.Empty;
foreach (Match match in Regex.Matches(test, @"(project\[1\]/.*\[)([0-9])(\]\n)"))
{
    result += match.Groups[1].Value;
    result += (int.Parse(match.Groups[2].Value) + 1).ToString();
    result += match.Groups[3].Value;
}

テキストを逐語的に置き換えたい場合は、次のように簡単ですRegex.Replace(test, @"abc(.*)cba", @"cba$1abc")

于 2012-07-24T13:04:40.820 に答える
-3

たとえば、 String.Replace (String, String) を使用できます

String.Replace ("someword[1]", "someword[2]")
于 2012-07-24T12:48:58.263 に答える