Mysłałem że negative lookbehind juz rozwiąże mój problem ale jednak dalej coś nie wychodzi(brakuje dokładnie jednego znaku który ucina) opisze dokładnie z czym mam problem, mam do zamiany taką strukture:
[list][*]jeden\r\n[*]dwa\r\n[*]trzy[/list]
z tym że ta struktura może wyglądać równie dobrze tak:
[list][*]jeden[*]dwa[*]trzy[/list]
albo w ogóle tak
[list]\r\n[*]jeden\r\n[*]dwa\r\n[*]trzy\r\n[/list]
i staram się napisać jakieś wspólne wyrażenie dla tych przypadków, a poki co nie moge nawet pierwszego napisać bo brakuje w nim jednego znaku czyli to
[list][*]jeden\r\n[*]dwa\r\n[*]trzy[/list]
chce zamienić na
<List><ListItem><Paragraph>jeden</Paragraph></ListItem><ListItem><Paragraph>dwa</Paragraph></ListItem><ListItem><Paragraph>trzy</Paragraph></ListItem></List>
więc próbuje najpierw zamienić to co najłatwiej
s1 = "[list][*]jeden\r\n[*]dwa\r\n[*]trzy[/list]";
Regex rex = new Regex(@"\[list\](.*?)\[/list\]", RegexOptions.Singleline);
string x = rex.Replace(s1, "<List>$1</List>");
a później
x = Regex.Replace(x, @"\[\*\](.*?)[\r\n(?<!\<)]", "<ListItem><Paragraph>$1</Paragraph></ListItem>");
ostatecznie otrzymuje juz prawie to co chciałem osiągnać w 1szym przypadku:
<List><ListItem><Paragraph>jeden</Paragraph></ListItem>
<ListItem><Paragraph>dwa</Paragraph></ListItem>
<ListItem><Paragraph>trzy</Paragraph></ListItem>/List>
jak widać nie ma "<" przy zamykającym tagu List, a może da się to po prostu jeszcze łatwiej zrobić jednym wyrażeniem? mam z tym problem ponieważ [*] nie ma tagu zamykającego kończy się albo "\r\n" albo "<" lub "[" i nijak nie moge napisac pod ta strukture wyrażenia