-3

我有以下形式的字符串:

"(number) number"

例如,它可能包含:

5 (5)

或者

5 (3)

我希望创建一个 int 变量来保存第一个值(在两种情况下都是 5)和第二个 int 变量,它将保存括号中的值(第一种情况下为 5,第二种情况下为 3)。

什么是我解析这个字符串并将信息保存在变量中的最佳方式?

4

6 回答 6

0

有趣的方式;-)

var s = "5 (3)";
var space = s.IndexOf(' ');
var openParen = s.IndexOf('(')+1; 
var closeParen = s.IndexOf(')');
int firstNumber = int.Parse(s.Substring(0, space));
int secondNumber = int.Parse(s.Substring(openParen, closeParen-openParen));

或正则表达式方式:

var s = "5 (3)";
var match = Regex.Match(s, @"(\d+( \((\d+)\)");
int firstNumber = int.Parse(match.Groups[1].Value);
int secondNumber = int.Parse(match.Groups[2].Value);
于 2012-04-19T14:08:25.857 回答
0

使用正则表达式:

string input = "5 (3)";
string pattern = @"(\d+) \((\d+)\)";
var match = Regex.Match(input, pattern);
if (match.Success)
{
    int x = int.Parse(match.Groups[1].Value);
    int y = int.Parse(match.Groups[2].Value);
    ...
}
else
{
    // Fail
    ...
}
于 2012-04-19T14:08:39.897 回答
0

对于第三种选择:

看看String.Split 方法Int32.Parse 方法

于 2012-04-19T14:09:26.043 回答
0

这不是我的想法,所以它可能需要一些更正。您可以将字符串拆分为所有不需要的字符,并删除任何空值。

string[] values = stringValues.Split(new char[] {' ','(',')'}, StringSplitOptions.RemoveEmptyEntries);
foreach (string stringValue in values)
{
    int intValue = Convert.ToInt32(stringValue);
    // etc.
}
于 2012-04-19T14:09:59.653 回答
0

使用一些正则表达式!\d指定数值并( )指定返回值..

var regex = new Regex("(\d+) \((\d+)\)");
var match = regex.Match(yourStringVariable);

所以对于yourStringVariable = "5 (3)",输出将是:

Console.WriteLine(match.Groups[1].Value); // Prints 5
Console.WriteLine(match.Groups[2].Value); // Prints 3
于 2012-04-19T14:10:56.667 回答
0
my $str = "(5) 3";
my ($x, $y) = $str =~ /\d+/g;
print "$x\t$y\n";

测试链接:http: //ideone.com/PzidT


如果您不确定输入是否正好有两个数字,那么更安全的代码是:

my $str = "(5) 3 4 (8)"; 
my ($x, $y) = ($str =~ /\d+/g)[0..1]; 
print "$x\t$y\n";

测试链接:http: //ideone.com/dBIjh

于 2012-04-19T14:17:53.210 回答