正規表現パターンでは、+
を示しますOne or More
。
代わりにこの文字列を使用してみてください
@"^(?<Key>\w+)\s+(?<Value>.*)$
は0 を含むことを*
示します。Any Number
アップデート
次のコードをテストしたところ、この出力が得られました。
string t1 = "field1 ";
string t2 = "field2 iopoi";
string t3 = "field3 12.12.12";
Regex rTest = new Regex(@"^(?<Key>\w+)\s+(?<Value>.*)$");
if (rTest.IsMatch(t1))
{
MessageBox.Show("T1 match");
foreach (Match m in rTest.Matches(t1))
textBox1.Text += String.Format("Key: {0}\tValue: {1}\r\n", m.Groups["Key"].Value, m.Groups["Value"].Value);
}
textBox1.Text += "\n\n";
if (rTest.IsMatch(t2))
{
MessageBox.Show("T2 match");
foreach (Match m in rTest.Matches(t2))
textBox1.Text += String.Format("Key: {0}\tValue: {1}\r\n", m.Groups["Key"].Value, m.Groups["Value"].Value);
}
textBox1.Text += "\n\n";
if (rTest.IsMatch(t3))
{
MessageBox.Show("T3 match");
foreach (Match m in rTest.Matches(t3))
textBox1.Text += String.Format("Key: {0}\tValue: {1}\r\n", m.Groups["Key"].Value, m.Groups["Value"].Value);
}
出力:
Key: field1 Value:
Key: field2 Value: iopoi
Key: field3 Value: 12.12.12
.Trim()
また、各初期文字列でこのコード呼び出しをテストしました。
呼び出し後に t1 が一致しませんでした.Trim()
この理由は、.Trim が field1 や field33 などに続くすべての空白を削除し、正規表現にはOne or More
空白文字が必要だからです。
新しい正規表現:代わりにこれを使用してみてください@"^(?<Key>\w+)\s*(?<Value>.*)$"
\s の後にも * が続くことに注意してください。これで、Trim を使用した後も一致するはずです。