.net 从包含字母和空格的字符串中解析整数-C#

.net 从包含字母和空格的字符串中解析整数-C#,.net,parsing,c#-2.0,.net,Parsing,C# 2.0,从包含字母和空格的字符串中解析整数的最有效方法是什么 例如: 我收到以下字符串:“RC 272”。我想从字符串中检索272 我正在使用C#和.NET 2.0框架。因为字符串的格式不会更改: 一个简单的正则表达式可以提取数字,然后您可以解析它: int.Parse(Regex.Match(yourString, @"\d+").Value, NumberFormatInfo.InvariantInfo); 如果字符串可能包含多个数字,则可以使用相同的正则表达式循环查找匹配项: for (Matc

从包含字母和空格的字符串中解析整数的最有效方法是什么

例如: 我收到以下字符串:“RC 272”。我想从字符串中检索272


我正在使用C#和.NET 2.0框架。

因为字符串的格式不会更改:


一个简单的正则表达式可以提取数字,然后您可以解析它:

int.Parse(Regex.Match(yourString, @"\d+").Value, NumberFormatInfo.InvariantInfo);
如果字符串可能包含多个数字,则可以使用相同的正则表达式循环查找匹配项:

for (Match match = Regex.Match(yourString, @"\d+"); match.Success; match = match.NextMatch()) {
    x = int.Parse(match.Value, NumberFormatInfo.InvariantInfo); // do something with it
}
编辑:

如果它总是采用这种格式,那么下面的工作value=“RC 272”会不会类似


如果始终采用“ABC 123”格式:


只是为了好玩,还有一种可能性:

int value = 0;
foreach (char c in yourString) {
  if ((c >= '0') && (c <= '9')) {
    value = value*10+(c-'0');
  }
}
int值=0;
foreach(字符串中的字符c){

如果((c>='0')&&(cGuys),因为它总是采用“ABC 123”格式,为什么不跳过IndexOf步骤呢

string input = "RC 272";
int result = int.Parse(input.Substring(3));

它是否总是采用字母、空格、数字的格式?@Brandon-是的,它总是采用这种格式。当我尝试构建此解决方案时,我遇到了以下错误:“与int.Parse(string、System.Globalization.NumberStyles)匹配的最佳重载方法有一些无效参数”我不知道“simple”和“regex”可以在同一个句子中使用,而不会出现语法错误。正则表达式不需要凌乱,在.NET引擎中,您可以使用命名组、先行和后顾断言等,以及选项auch,并忽略模式空白(允许构造正则表达式内容,将其放在多个缩进行上)以及为组指定显式捕获,以保持高性能,即使使用了大量正常组。所有这些都有助于使正则表达式事实上非常可读。在某种程度上,您可以将其与C语言进行比较,C语言可能会被混淆为一团乱,但也可以合理使用。此外,正则表达式确实捕获了意图它比
indexof
split
解决方案更好地处理问题(无效的输入数据),通过不匹配模式(通过
match.Success
属性),而不是在过程的后期某处导致无效索引或解析错误。(很抱歉第二条评论,我在第一条评论中已经没有字符了;))我想说的是,对于这个任务来说,regexp可能太过复杂了,而且可能会有相对较差的性能,即使使用precompile.Works,但会创建两个临时字符串,而LFSR的解决方案只创建一个临时字符串。
string s = "RC 272";
int val = int.Parse(s.Split(' ')[1]); // val is 272
int value = 0;
foreach (char c in yourString) {
  if ((c >= '0') && (c <= '9')) {
    value = value*10+(c-'0');
  }
}
string input = "RC 272";
int result = int.Parse(input.Substring(3));