次の形式の文字列があります。
"(number) number"
たとえば、次のものが含まれる場合があります。
5 (5)
また
5 (3)
最初の値 (どちらの場合も 5) を保持する int 変数と、括弧内の値 (最初のケースでは 5、2 番目のケースでは 3) を保持する 2 番目の int 変数を作成したいと考えています。
この文字列を解析し、必要に応じて変数に情報を保存する最良の方法は何ですか?
次の形式の文字列があります。
"(number) number"
たとえば、次のものが含まれる場合があります。
5 (5)
また
5 (3)
最初の値 (どちらの場合も 5) を保持する int 変数と、括弧内の値 (最初のケースでは 5、2 番目のケースでは 3) を保持する 2 番目の int 変数を作成したいと考えています。
この文字列を解析し、必要に応じて変数に情報を保存する最良の方法は何ですか?
楽しい方法 ;-)
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);
正規表現の使用:
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
...
}
my $str = "(5) 3";
my ($x, $y) = $str =~ /\d+/g;
print "$x\t$y\n";
テストリンク: http://ideone.com/PzidT
入力に正確に 2 つの数値があるかどうかわからない場合、より安全なコードは次のとおりです。
my $str = "(5) 3 4 (8)";
my ($x, $y) = ($str =~ /\d+/g)[0..1];
print "$x\t$y\n";
テストリンク: http://ideone.com/dBIjh
3 番目のオプションの場合:
String.Split メソッドとInt32.Parse メソッドを見てください。
これは私の頭のてっぺんから外れているので、修正が必要な場合があります。必要のないすべての文字で文字列を分割し、空の値を削除することができます。
string[] values = stringValues.Split(new char[] {' ','(',')'}, StringSplitOptions.RemoveEmptyEntries);
foreach (string stringValue in values)
{
int intValue = Convert.ToInt32(stringValue);
// etc.
}
いくつかの正規表現を使用してください! \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