Как извлечь несколько значений из Regex? - PullRequest
0 голосов
/ 26 августа 2018
Util.ClearResults();
string tst = String.Join("", DateRange.Take(10).Select(d => d.DocHistory));
var matches = Regex.Matches (tst, "(?:[a-zA-Z'-]+[^a-zA-Z'-]+){0,2}assigned by(?:[^a-zA-Z'-]+[a-zA-Z'-]+){0,2}", RegexOptions.Multiline);
matches.Dump("Regex Matches");
foreach(var match in matches)
{
    match.Dump("Ind Match");
}

У меня есть этот код, и он, кажется, работает правильно, захватывая «Значение», и не выделяет из него определенные значения:

У меня есть строки, подобные следующему: «Запрос закрытJack Arm от 08/16/2018, правопреемник №1 Джеймс Арье, назначенный Скотти Шепом 16 августа 2018 года, запрос, представленный Mac Weaver 16 августа 2018 года, запрос, созданный Mac Weaver 16 августа 2008 года "

Я пытаюсь извлечь имя слева и справа от слова «назначено», но я получаю «Джеймс Арье, назначенный Скотти Шепом» ... есть ли способ выделить его"значение", которое он нашел в 3 переменных, с регулярным выражением?

1 Ответ

0 голосов
/ 26 августа 2018

Вам нужно использовать группы захвата вокруг частей, которые вам нужны:

((?:[a-zA-Z'-]+[^a-zA-Z'-]+){0,2})assigned by((?:[^a-zA-Z'-]+[a-zA-Z'-]+){0,2})
^ ---------- Group 1 ----------- ^           ^ ---------- Group 2-----------  ^

См. Демонстрационную версию regex

enter image description here

C # демо :

var s = "Request closed by Jack Arm on 08/16/2018,Assignee #1 James Arye assigned by Scotty Shep on 08/16/2018,Request submitted by Mac Weaver on 08/16/2018,Request created by Mac Weaver on 08/16/2018";
var pattern = @"((?:[a-zA-Z'-]+[^a-zA-Z'-]+){0,2})assigned by((?:[^a-zA-Z'-]+[a-zA-Z'-]+){0,2})";
var matches = Regex.Matches(s, pattern);
foreach (Match match in matches)
{
    Console.WriteLine(match.Groups[1].Value.Trim());
    Console.WriteLine(match.Groups[2].Value.Trim());
}

Выход:

James Arye
Scotty Shep
...