目前,我使用:
Variabls:
int recordCount = 5;
Header = "Index"; // Can also be "Starting Index"
部首:
Header = Header.Split(' ')[0] + " (" + recordCount + ")";
的变化:
Index (5)
要:
Index (6)
当我想用新的Header替换Header时,我使用了上面的代码,但问题是当我开始在Header
中使用多个单词时,它会删除Header Name的其余部分。即当它显示Starting Index:
时,它只显示Starting
。
我可以使用Regex简单地查找括号中的值并将其替换为另一个变量吗?
答案 0 :(得分:5)
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);
答案 1 :(得分:1)
如果您需要系统地替换其中的一些(并且算法需要原始值),请记住Regex.Replace()可以接受将返回替换值的方法。这是一个增加parens中所有整数的例子:
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)
该方法采用正则表达式匹配对象并返回替换字符串。 我在这里使用了lambda方法,但你的正则表达式和替换方法都可以根据需要复杂化。
答案 2 :(得分: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。
此处无需附加额外的括号,因为在比赛期间未捕获它们。
答案 3 :(得分: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");
答案 4 :(得分:0)
\((\d+)\)
这会更适合
并将在这种情况下替换数字“asdq(wdq)wdqwd(12)”
答案 5 :(得分:0)
int dynamicNumber = 6;
string pattern = string.Format("({0})", dynamicNumber);
string data = "My Header 6:";
Console.WriteLine (Regex.Replace(data,pattern, "!!!")); // My Header !!!: