私はこのようなコンテンツを持っています:
var testInput =
"05(testcontent)\r\n" +
"06(testcontent2)\r\n" +
"07(testcontent3)(testcontent4)" +
"08(testcontent5)";
行ごとに1つのコード文字列と2つの値文字列を取得する必要があります。最初の行の場合:
- コード:
"05"
- 値1:
"testcontent"
- 値2:空の文字列。
3行目:
- コード:
"07"
- 値1:
"testcontent3"
- 値2:
"testcontent4"
私が使用するパターン:
// (?<Code>[0-9]{2}) - 2 digit number
// \((?<Value1>.+)\) - First value, which is inside the parentheses.
// (\((?<Value2>.+)\))? - Second value, which also is inside the parentheses.
// The second value does not always exist. Which is why it has "?" at its end.
var testPattern = @"(?<Code>[0-9]{2})\((?<Value1>.+)\)(\((?<Value2>.+)\))?";
私が使用するコード:
var testRegex = new Regex(testPattern,
RegexOptions.Compiled |
RegexOptions.CultureInvariant |
RegexOptions.ExplicitCapture |
RegexOptions.Multiline);
foreach (Match match in testRegex.Matches(testInput))
Console.WriteLine("{0}: {1} | {2}",
match.Groups["Code"].Value,
match.Groups["Value1"].Value,
match.Groups["Value2"].Value);
私が得る結果:
05: testcontent |
06: testcontent2 |
07: testcontent3)(testcontent4)08(testcontent5 |
^
パターンの最初と最後で使用すると$
、さらに悪化します。
07: testcontent3)(testcontent4)08(testcontent5 |
それで、
- 「RegexOptions.Multiline」を指定すると、なぜ
^
さらに$
複雑になるのですか? - 私のパターンの何が問題になっていますか?