用新数字替换第一个左括号和数字

时间:2018-11-21 13:24:10

标签: c# regex replace

我正在使用Visual Studio / C#,并具有以下字符串:

string test = "We have files (15 files)";

现在我要替换第一个开括号后的第一个数字(整数)。

例如,如果将15替换为6,则字符串现在将具有以下值:

"We have files (6 files)"

这是我到目前为止的内容,但是它不起作用:

int newCount = 6;
test = Regex.Replace(test, "([0-9]", "(" + newCount );

预先感谢

注意#1: 如果第一个区域中有数字,则需要检查括号。例如下面的

"There are 20 missing (400 processed)"

如果通过450,结果将是:

"There are 20 missing (450 processed)"

3 个答案:

答案 0 :(得分:4)

那是因为两件事。

首先:(是RegEx使用的字符,要从字面上进行匹配,您需要使用\对其进行转义:\(

第二:您只匹配一个数字,因此当您尝试匹配(15时,它将仅匹配并替换(1

int newCount = 6;
test = Regex.Replace(test, @"\(\d+", "(" + newCount );

这应该可以解决问题!查看说明here

编辑

更好的方法是只匹配数字:

test = Regex.Replace(test, @"\d+", newCount.ToString());

答案 1 :(得分:1)

尝试一下:

string test = "We have files (15 files)";
string pattern = "\d+";
string replacement = "6";
Regex rgx = new Regex(pattern);
string result = rgx.Replace(test, replacement);

您不需要更换支架。上面的正则表达式仅选择数字,该数字可以是任意数字长。

答案 2 :(得分:0)

  int newCount = 6;
  string test = "We have files (15 files)";
  test = Regex.Replace(test, @"\([0-9]+", newCount.ToString());

我尝试进行最少的更改

您缺少基本表示“一个或多个”的“ +”运算符

编辑后,您还缺少“ \”,该字符转义了特殊字符

您可以随时在线上查看正则表达式并检查模式here

编辑:

test = Regex.Replace(test, "[(0-9]", "(" + newCount);不起作用,因为您将替换每个模式的 first 遇到的问题,并且会得到:We have files (6(6(6 files),因为它与"(", "1", "5"匹配,并且如果原始文本为We have files (156 files) [末尾加6],您会得到We have files (6(6(6(6 files),因为它不匹配“(”,“ 1”,“ 5”,“ 6”