【问题标题】: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 的常用方法更快,可能就足够了。

标签: c# regex replace


【解决方案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"

【讨论】:

    猜你喜欢
    • 2019-02-03
    • 2021-12-25
    • 1970-01-01
    • 1970-01-01
    • 2017-03-20
    • 1970-01-01
    • 2014-09-12
    • 2020-04-24
    • 1970-01-01
    相关资源
    最近更新 更多