2015-02-15 3 views
0

Относительно новый для регулярных выражений в C#. Стреляйте, чтобы понять это правильно.Регулярное выражение в C#, которое может либо соответствовать новой строке, либо игнорировать ее

Требование:

Входной формат строки: Некоторые случайный текст XXXX вызвало возмущение XXXX часов переделок. Из-за некоторого случайного текста, указанного в XXXX

Мне нужно было получить все 3 XXXX с входа.

Конкретный пример: жалоб перечислены в каком-портале, как ниже RequirementChanges вызвало нарушение 200 часов переделок. В связи с этим есть запрос, указанный в Excel.

Мое регулярное выражение должно давать результат: ТребованиеЧенж, 200 часов, Excel.

Дополнительная информация о входной строки в том, что: Только вызвало возмущение, переделок, сообщили в всегда будет там в строке ввода. Оставшимся может быть любой случайный текст, и разрывы строк могут находиться где угодно между ними, за исключением этих 3 постоянных строк. Я планирую проанализировать эту строку ввода в C#. Запросите свои данные. Thx,

ответ

1

Использование \s+ соответствует всем типам вертикальных и горизонтальных разрывов. И наоборот \S+ будет соответствовать одному или нескольким непространственным символам.

@"\S+(?=\s+caused disturbance)|\S+\s+\S+(?=\s+of rework)|(?<=\breported in\s+)\S+" 

Код:

String input = @"Complaint listed in some portal is like below RequirementChanges caused disturbance of 200 hours of rework. Due to this there is a request reported in Excel."; 
Regex rgx = new Regex(@"\S+(?=\s+caused disturbance)|\S+\s+\S+(?=\s+of rework)|(?<=\breported in\s+)\S+"); 
foreach (Match m in rgx.Matches(input)) 
Console.WriteLine(m.Groups[0].Value); 

IDEONE

Смежные вопросы