如何使用通配符删除字符串的特定部分?

时间:2012-11-21 14:05:03

标签: c# regex string

目前,我使用:

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简单地查找括号中的值并将其替换为另一个变量吗?

6 个答案:

答案 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 !!!: