我正在尝试在C#中使用正则表达式来解析多行文件(当前仅在字符串中),而这部分似乎是问题所在(。*?\ n),它将拆分.v / L1和.v / L2,但是当我在它们之间插入nl失败时,输入文件将看起来像这样。
MSG
.v/1L
.v/2L
.some other data
.and so on
ENDMSG
这是C#代码的一部分
string nl = new string(new char[] { '\u000A' });
string pattern = @"(?<group>((?<type>MSG\n)(.*?\n)(?<end>ENDMSG\n)))";
string input = @" MSG" + nl + ".v/1L.v/2L" + nl + "ENDMSG" + nl;
// The Line below doesn't work
//string input = @" MSG" +nl+ ".v/1L" +nl+ ".v/2L" +nl+ "ENDMSG" + nl;
RegexOptions options = RegexOptions.Multiline;
foreach (Match m in Regex.Matches(input, pattern, options))
{
Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index);
}
这是有效的输出:
Starting RegEx !
RegEx : (?<group>((?<type>MSG\n)(.*?\n)(?<end>ENDMSG\n)))
'MSG
.v/1L.v/2L << Should be split into 2 when adding a \n between
ENDMSG
' found at index 1.
Executing finally block.
答案 0 :(得分:-1)
如果指定RegexOptions.Multiline,则可以使用^和$分别匹配行的开头和结尾。
如果您不希望使用此选项,请记住,新行可能是以下任意一项:\n, \r, \r\n
,因此,您不应该只使用\ n,而应该只使用\ { {1}},或更确切地说:[\n\r]+
。