2012-07-16 41 views
0

我有这个字符串我有一个字符串如何从字符串中提取数C#

"transform(23, 45)" 

提取23和45,我做

var xy = "transform(23,45)".Substring("transform(23,45)".indexOf('(') + 1).TrimEnd(')'); 
var num = xy.Split(','); 

我使用C#。有没有更好的方法在c#中做到这一点?

回答

6

使用正则表达式:

string sInput = "transform(23, 45)"; 
Match match = Regex.Match(sInput, @"(\d)+", 
       RegexOptions.IgnoreCase); 

if (match.Success) 
{ 
    foreach (var sVal in match) 
      // Do something with sVal 
} 

你可以阅读更多关于正则表达式here。 使用RegExr进行培训,它可以帮助很多!

2

那么,简单的正则表达式字符串应该是([0-9]+),但是您可能需要定义其他表达式约束,例如,您在处理句点,逗号等字符串时做了什么?

var matches = Regex.Matches("transform(23,45)", "([0-9]+)"); 
foreach (Match match in matches) 
{ 
    int value = int.Parse(match.Groups[1].Value); 
    // Do work. 
} 
+0

对于“句点,逗号等...”,并添加到列表中:非10位数字文字,强制类型文字([VB示例](http://msdn.microsoft.com/zh-cn/ com/en-us/library/s9cz43ek(v = vs.80).aspx),但其他编程语言也有它们)等等。 – 2012-07-16 06:44:18

0

这将做到这一点

string[] t = "transform(23, 45)".ToLower().Replace("transform(", string.Empty).Replace(")", string.Empty).Split(','); 
0

使用Regex

var matches = Regex.Matches(inputString, @"(\d+)"); 

解释:

\d Matches any decimal digit. 

\d+ Matches digits (0-9) 
     (1 or more times, matching the most amount possible) 

和使用:

foreach (Match match in matches) 
{ 
    var number = match.Groups[1].Value; 
}