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

Posted

技术标签:

【中文标题】用新数字替换第一个左括号和数字【英文标题】:Replace first opening parentheses and number with new number 【发布时间】:2019-04-24 01:54:31 【问题描述】:

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

【问题讨论】:

您是否考虑过使用字符串插值代替(例如string test = $"We have files (newCount files)";)?还是您必须使用/处理现有字符串? 谢谢你的低音推子。是的,我必须使用现有的字符串。 正则表达式对于该任务可能是矫枉过正。使用indexOf 的常用方法更快,可能就足够了。 【参考方案1】:

这是因为两件事。

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

第二:你只匹配一个数字,所以当你尝试匹配(15时,它只会匹配和替换(1

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

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

编辑

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

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

【讨论】:

那么,为什么一定要在里面使用(呢? @TânNguyễn 没必要,我只是用他的例子回答了他的要求。 无聊超载,干得好。如果第一个区域有其他数字,我需要检查括号。我在 Visual Studio 中收到关于您的第一个示例中的转义序列的错误。 @RobertSmith 抱歉,您需要使用 @ 转义模式字符串,因为它现在包含一个 `\`。我更新了我的答案! 编辑答案不好,你会得到There are 450 missing (450 processed)【参考方案2】:

试试这个:

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

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

【讨论】:

谢谢尼克干得好。如果第一个区域有数字,我需要检查左括号。对不起,我没有提到。【参考方案3】:
  int newCount = 6;
  string test = "We have files (15 files)";
  test = Regex.Replace(test, @"\([0-9]+", newCount.ToString());

我试图做最少的改变

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

在您的 Edit 之后,您还缺少转义特殊字符的“\”

您总是可以在线使用正则表达式并检查您的模式here

编辑:

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

【讨论】:

以上是关于用新数字替换第一个左括号和数字的主要内容,如果未能解决你的问题,请参考以下文章

算法(Algorithms)第4版 练习 1.3.9

替换不在括号中的数字?

用列数据替换括号内的字符串

SQL 用新值替换旧值

简单的介绍变量

重新排列后用另一个列表中的数字替换一个列表