将模式匹配到行尾

时间:2015-12-17 21:00:15

标签: c# .net regex visual-studio-2015

我正在尝试从文本文件中获取一些内联注释,并需要一些表达式的帮助。

this comes before selection
this is on the same line %% this is the first group and it can have any character /[{3$5!+-p
here is some more text in the middle
this stuff is also on a line with a comment %% this is the second group of stuff !@#%^()<>/~`
this goes after the selections

我正在尝试获取%% \ s +之后的所有内容。这是我试过的:

  

%% \ S +(。*)$

但是匹配第一个%%之后的所有文本。不知道从哪里开始。

2 个答案:

答案 0 :(得分:1)

大多数默认为点的引擎与换行符不匹配 AND 不是多行模式。

这意味着%%\s+(.*)$不应该匹配,除非它找到了 字符串中最后一行的%%

使用内联修饰符(?..)而不是尝试对抗它 覆盖外部交换机。

使用{em> off 全部点

(?-s)%%\s+(.*)

答案 1 :(得分:0)

由于.默认匹配任何字符,但与换行符匹配,因此您无需使用$

%%\s+(.*)

请参阅regex demo

说明:

  • %% - 两个文字%符号
  • \s+ - 一个或多个空格
  • (.*) - 除换行符(捕获到第1组)以外的任何字符数0或更多

enter image description here

C# demo

var s = "THE_STRING";
var result = Regex.Matches(s, @"%%\s+(.*)")
            .Cast<Match>()
            .Select(p=>p.Groups[1].Value)
            .ToList();
Console.WriteLine(string.Join("\n", result));