2016-03-17 1 views
1

Я пытаюсь извлечь строку между { и } при условии, что строка между содержит слово ltrchRegex для извлечения строки между символами, удовлетворяющим условию

входной строку:

{\ rtf1 \ ansi \ ansicpg1252 \ uc1 \ htmautsp \ deff2 {\ fonttbl {\ f0 \ fcharset0 Times New Roman;} {\ f2 \ fcharset0 Segoe UI;}} {\ colortbl \ red0 \ green0 \ blue0; \ red255 \ green255 \ blue255 ;} \ loch \ hich \ dbch \ pard \ plain \ ltrpar \ itap0 {\ lang1033 \ fs18 \ f2 \ cf0 \ cf0 \ ql {\ f2 {\ ltrch A} {\ b \ l trch DD} \ li0 \ ri0 \ sa0 \ sb0 \ fi0 \ ql \ par} {\ f2 {\ b \ i \ ul \ ltrch Italuic} \ li0 \ ri0 \ sa0 \ sb0 \ fi0 \ ql \ par}}}

выход я ожидал получить это:

{\ltrch A }, {\b\ltrch DD}, {\b\i\ul\ltrch Italuic}

пытаются вокруг с \{\s*(((?!\{|\}).)+)\s*ltrch.*\} и (?<=\{)([^{]+)ltrch.*(?=\}), однако я не получаю 3 матча.

ответ

0

Я думаю, что-то вроде этого:

String source = @"{\rtf1\ansi\ansicpg1252\uc1\htmautsp\deff2{\fonttbl{\f0\fcharset0 Times New Roman;}{\f2\fcharset0 Segoe UI;}}{\colortbl\red0\green0\blue0;\red255\green255\blue255;}\loch\hich\dbch\pard\plain\ltrpar\itap0{\lang1033\fs18\f2\cf0 \cf0\ql{\f2 {\ltrch A }{\b\ltrch DD}\li0\ri0\sa0\sb0\fi0\ql\par} 
{\f2 {\b\i\ul\ltrch Italuic}\li0\ri0\sa0\sb0\fi0\ql\par} 
    } 
    }"; 

// start with { 
// followed by any number of any characters with { and } excluded 
// ltrch 
// followed by any number of any characters with { and } excluded 
// end with } 
String pattern = @"\{[^{}]*ltrch[^{}]*\}"; 

var result = Regex.Matches(source, pattern) 
    .OfType<Match>() 
    .Select(match => match.Value); 

// Test:  
// {\ltrch A }, {\b\ltrch DD}, {\b\i\ul\ltrch Italuic} 
Console.Write(String.Join(", ", result)); 
+0

Спасибо. Да, это абсолютно нормально. – Kallol

+0

@Kallol: добро пожаловать. –

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