2

現在、私は以下を使用しています:

Variabls:

 int recordCount = 5;
 Header = "Index"; // Can also be "Starting Index"

ヘッダ:

 Header = Header.Split(' ')[0] + " (" + recordCount + ")";

変更点:

 Index (5)

に:

 Index (6)

ヘッダーを新しいヘッダーに置き換えたい場合は、上記を使用しますが、問題は、複数の単語を使用し始めるとHeader、残りのヘッダー名が削除されることです。つまり、それがStarting Index:表示するだけだと言うときStarting

正規表現を使用して、括弧の間の値を検索し、それを別の変数に置き換えることはできますか?

4

6 に答える 6

6
Regex re = new Regex(@"\(\w+\)");
string input = "Starting Index: (12asd)";
string replacement = "12ddsa";
string result = re.Replace(input, replacement);

より複雑な置換を実行する必要がある場合(つまり、置換が中括弧の間のキャプチャされた値に依存する場合)、Regex.Match方法に固執する必要があります

更新:Match物事ですぐに醜くなる:)

 Regex re = new Regex(@"^(.*)\((\w+)\)\s*$");
 string input = "Starting Index: (12)";
 var match = re.Match(input);

 string target = match.Groups[2].Value;
 //string replacement = target + "!!!!"; // general string operation
 int autoincremented = Convert.ToInt32(target) + 1; // if you want to autoincrement

 string result = String.Format("{0}: ({1})", match.Groups[1].Value, autoincremented);
于 2012-11-21T14:11:40.053 に答える
1

これらのいくつかを体系的に置き換える必要がある場合(およびアルゴリズムが元の値を必要とする場合)、Regex.Replace()は置き換えられた値を返すメソッドを受け入れることができることに注意してください。括弧で囲まれたすべての整数をインクリメントする例を次に示します。

string s1 = "Index (5) and another (45) and still one more (17)";

string regex = @"\((\d+)\)";

string replaced = Regex.Replace(s1,regex,m => "("+(Convert.ToInt32(m.Groups[1].Value)+1).ToString()+")");
// Result: Index (6) and another (46) and still one more (18)

このメソッドは、正規表現の一致オブジェクトを受け取り、置換文字列を返します。ここではラムダメソッドを使用しましたが、正規表現と置換メソッドはそれぞれ必要に応じて複雑にすることができます。

于 2012-11-21T15:00:51.193 に答える
1

この方法で行くこともできます:

string sample = "Index (5) Starting Index(0) and Length (6)";
string content = Regex.Replace(sample, @"(?<=\()\d+(?=\))", m => (int.Parse(m.Value) + 1).ToString());

このパターンは、丸括弧で囲まれた任意の数の桁を検索し、1に進みます。

ここでは、一致中にキャプチャされなかったため、追加のブラケットを追加する必要はありません。

于 2012-11-21T20:20:59.357 に答える
0
int dynamicNumber = 6;

string pattern = string.Format("({0})", dynamicNumber);

string data = "My Header 6:";

Console.WriteLine (Regex.Replace(data,pattern, "!!!")); // My Header !!!:
于 2012-11-21T14:23:27.067 に答える
0

このパターンを使用できます

\[\((\d+)\).*?\]

括弧の間の数字と一致させ、その後、その数字を好きなものに置き換えることができます

var mg = Regex.Match( "Starting Index:(10)", @"\[\((\d+)\).*?\]");

if (mg.Success)
{
    var num = mg.Groups[1].Value; // num == 10
}

その後

headerString = headerString.Replace("10", "11");
于 2012-11-21T14:11:40.933 に答える
0

\((\d+)\)これはより適しています

その場合は「asdq(wdq)wdqwd(12)」という数字に置き換えられます

于 2012-11-21T14:16:36.210 に答える