用新数字替换第一个左括号和数字
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"
【讨论】:
以上是关于用新数字替换第一个左括号和数字的主要内容,如果未能解决你的问题,请参考以下文章