如何在C#中提取字符串末尾']'前的数字(支持单/多位数字场景)
如何在C#中提取字符串末尾']'前的数字(支持单/多位数字场景)
嗨,看起来你已经摸到了门道,但最后一步还差一点点——要把']'前面的数字单独抠出来对吧?我给你两个实用的方案,不管是单数字(比如1)还是多数字(比如26)都能轻松搞定:
方案一:用正则表达式(最简洁灵活)
正则表达式特别适合这种有固定模式的字符串提取需求,我们可以直接匹配末尾']'前面的连续数字:
string input = "[XR] Z_Prem_4000+_Delphi_700+ [InstalmentScheme 26]"; // 正则规则:匹配一个或多个数字,且这些数字紧跟在字符串末尾的']'之前 Match match = Regex.Match(input, @"\d+(?=\]$)"); if (match.Success) { string targetNumber = match.Value; Console.WriteLine(targetNumber); // 输出 26 }
简单解释下这个正则的逻辑:
\d+:匹配1个或多个数字(不管是1位还是多位都能覆盖)(?=\]$):这是正向预查,用来确保我们匹配的数字后面,正好是字符串结尾的']',不会误抓其他位置的数字
方案二:纯字符串操作(不用依赖正则)
如果你不想用正则,也可以通过字符串索引定位来实现,步骤很清晰:
string input = "[XR] Z_Prem_4000+_Delphi_700+ [InstalmentScheme 1]"; // 先找到最后一个']'的位置 int closingBracketPos = input.LastIndexOf(']'); if (closingBracketPos != -1) { // 从']'的前一位开始,往回找第一个非数字的位置 int startPos = closingBracketPos - 1; while (startPos >= 0 && char.IsDigit(input[startPos])) { startPos--; } // 截取中间的数字部分 string targetNumber = input.Substring(startPos + 1, closingBracketPos - startPos - 1); Console.WriteLine(targetNumber); // 输出 1 }
这个方法的思路是:先锁定最后一个']'的位置,然后从它前面往回遍历,直到遇到非数字字符,最后把中间的数字段截取出来,同样能适配单/多位数字的情况。
另外提一句,你原来的方法其实可以小改,但局限性比较大——比如拿到reqWord之后用reqWord.TrimEnd(']'),但如果最后一个单词里除了末尾的']'还有其他非数字字符(比如abc123]),就会把非数字部分也留下来,所以还是上面两种方法更可靠哦。
备注:内容来源于stack exchange,提问作者Pratex
相关产品推荐
相关产品推荐

