我对正则表达式很新,我遇到了一个问题。我在包含许多换行符的字符串中间有以下数据:
Data I dont care about
Start row
First data row
Second data row
Third data row
End row
More data I dont care about
我需要编写一个正则表达式,它将创建三个包含数据行的组。我试过写
(?<=Start row\n)(.|\n)+?(?=End row)
但这只给了我一个包含所有三个数据行的组,而不是三组,每组包含一行。如果可能的话,也可能存在4或5个数据行,我想在不同的组中获取。数据行中的内容不遵循特定模式。
答案 0 :(得分:1)
答案 1 :(得分:0)
我认为你可以使用 Capture Collections 类 只需与此匹配,然后迭代第1组。
@"Start[ ]row\r?\n(?:([^\r\n]*)\r?\n)+?End[ ]row"
Start [ ] row
\r? \n
(?:
( [^\r\n]* ) # (1)
\r? \n
)+?
End [ ] row
C#代码:
string strSrc =
"Data I dont care about\n" +
"Start row\n" +
"First data row\n" +
"Second data row\n" +
"Third data row\n" +
"End row\n" +
"More data I dont care about\n" +
"End row\n";
Regex rx = new Regex(@"Start[ ]row\r?\n(?:([^\r\n]*)\r?\n)+?End[ ]row");
Match srcMatch = rx.Match(strSrc);
if (srcMatch.Success)
{
CaptureCollection cc = srcMatch.Groups[1].Captures;
for (int i = 0; i < cc.Count; i++)
Console.WriteLine("{0} = '{1}'", i, cc[i].Value);
}
输出:
0 = 'First data row'
1 = 'Second data row'
2 = 'Third data row'