问题
我有这个超长字符串(在现实世界中,它的长度超过3000行)
0 PAGE TEST
1 PROPERTY TESTPROP
1 PROPERTY TESTPROP2
1 PROPERTY TESTPROP3
0 PAGE TEST2
1 PROPERTY TESTPROP13
1 PROPERTY TESTPROP223
1 PROPERTY TESTPROP3
0 VIDEO TESTVD
1 PROPERTY TESTPROP1323
1 PROPERTY TESTPROP223
1 PROPERTY TESTPROP3211
所以基本上我想做的是:将所有这些部分合并在一个列表中
EDIT 我想要这样的东西
string str1 = "0 PAGE TEST1... ",
string str2 = "0 PAGE TEST2..."
..
并且此字符串应在一个列表中。
我尝试过的内容
这是我的代码
var start_with_line = $"{level} {value} "; // Is usually "0 PAGE "
var end_with_line = string.Concat(Enumerable.Repeat(Environment.NewLine, 2)); // Is usually "\r\n\r\n"
var expression = $@"\{start_with_line}.+\{end_with_line}"; // Is equivalent to "\0 PAGE.+\\r\n\r\n"
var matches = content.GetPagesFromContent(expression);
这是我的“ GetPagesFromContent”方法
private static List<string> GetPagesFromContent(this string content, string expression)
{
var list = new List<string>();
var matches = Regex.Matches(content, expression); // I get 0 matches here
foreach (Match match in matches)
list.Add(match.Value);
return list;
}
答案 0 :(得分:1)
您可以使用
private static List<string> GetPagesFromContent(this string content, string level)
{
return Regex.Split(content, @"(?>\r\n?|\n){2,}")
.Where(x => x.StartsWith(level))
.ToList();
}
regex匹配2个或更多出现的CRLF,CR或LF序列(使用原子组禁止回溯到组模式),并使用这些匹配项拆分字符串。
您可以考虑在使用Trim()
运行正则表达式之前删掉空格。