如何在以下 C# RegEx 表达式中使“test2”成为可选元素,当缺少“test2”元素时,正确解析出“test1”值?
StringBuilder sb = new StringBuilder();
sb.AppendLine(" test1=123 any text in between ");
sb.AppendLine(" some ");
sb.AppendLine(" more ");
sb.AppendLine(" text in between ");
sb.AppendLine(" test2=456 ");
sb.AppendLine(" test1=789 some text .. test2=012 ");
Regex regex = new Regex(@"test1=(?<test1>(\d+))((.|\s)+?)(test2=(?<test2>(\d+)))");
MatchCollection matches = regex.Matches(sb.ToString());
foreach (Match match in matches)
{
Group test1 = match.Groups["test1"];
Group test2 = match.Groups["test2"];
System.Console.WriteLine("Test1 = {0}, Test2 = {1}", test1.Value, test2.Value);
}
谢谢你。
@Oded - 我在这里回复,因为我无法正确格式化评论,而且我的回复比 StackOverflow 评论文本长度允许的长:
谢谢你。在您的第二个回复 RegEx 表达式中提出的建议导致以下输出:
Test1 = 123, Test2 =
Test1 = 789, Test2 =
这不太正确。你的第一个回复 RegEx 表达式导致
Test1 = 123, Test2 = 456
Test1 = 789, Test2 = 012
测试输出。这是正确的。
但如果我改变
sb.AppendLine(" test1=789 some text .. test2=012 ");
至
sb.AppendLine(" test1=789 some text .. test52=012 ");
那么测试结果输出将只有一行
Test1 = 123, Test2 = 456
我希望它是
Test1 = 123, Test2 = 456
Test1 = 789, Test2 =
在这种情况下。