我正在使用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)"
答案 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”