C#正则表达式与换行符不匹配

时间:2019-02-10 02:42:57

标签: c# regex

我正在尝试在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.

1 个答案:

答案 0 :(得分:-1)

如果指定RegexOptions.Multiline,则可以使用^和$分别匹配行的开头和结尾。

如果您不希望使用此选项,请记住,新行可能是以下任意一项:\n, \r, \r\n,因此,您不应该只使用\ n,而应该只使用\ { {1}},或更确切地说:[\n\r]+