2015-12-17 2 views
0

Я пытаюсь получить некоторые текстовые комментарии из текстового файла и вам нужна помощь с этим выражением.Соответствующий шаблон до конца строки

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 [email protected]#%^()<>/~` 
this goes after the selections 

Я пытаюсь получить все, что следует за %% \ s +. Вот то, что я пробовал:

%% \ s + $

Но что соответствует весь текст после первого %% (*.). Не уверен, куда идти отсюда.

+2

Это звучит, как вам нужно использовать [ 'RegexOptions.Multiline'] (https://msdn.microsoft.com/en-us/library/system.text .regularexpressions.regexoptions (v = vs.110) .aspx). – juharr

+0

На самом деле, не нужно использовать '$'. '%% \ s + (. *)' достаточно. –

+0

@stribizhev Да, если точка не соответствует новой строке, то как получилось, что результат '$' совпадает с первым %% до конца строки? Мне действительно интересно. – juharr

ответ

1

Большинство двигателей по умолчанию для точка не соответствует символам новой строки
И не многострочный Режим.

Это означает, что %%\s+(.*)$ не должен совпадать, если не найден
%% на последней строке в строке.

Вместо того, чтобы пытаться бороться с ним, использовать встроенные модификаторы (?..) что
переопределение внешние переключатели.

Использование (?-s)%%\s+(.*), который принимает от все точки

0

С . соответствует любому символу, а символ новой строки по умолчанию, вам не нужно использовать $:

%%\s+(.*) 

См regex demo

Пояснение:

  • %% - два буквенные символы %
  • \s+ - 1 или более пробельных символов
  • (.*) - 0 или более любых других, чем перевод строки символов (захватывается в 1-й группе)

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)); 
Смежные вопросы