C#Regex - Split和Keep Splitter

时间:2012-05-22 07:10:16

标签: c# regex lookahead

相关: https://stackoverflow.com/a/2910549/194031

我有一个字符串:

"abc defgh <!inc(C:\my files\abc.txt)!>kdi kdkd<!inc(C:\my files\abc.txt)!>"

我希望得到:

["abc defgh ", "C:\my files\abc.txt", "kdi kdkd", "C:\my files\abc.txt"]

另外,我不想要

"abc <!inc(C:\my files\abc.txt adf" (missing end bracket) 

分开。

根据相关问题和其他类似的答案,我需要使用前瞻,但我无法弄清楚如何在完成删除标记时使用它们,如果缺少部分标记则不会分裂。

2 个答案:

答案 0 :(得分:2)

这可能会帮助您入门。您可能需要再定制一些。

Regex.Split("...", @"<!inc\((?=.*?\)!>)|(?<=<!inc\(.*?)\)!>");

表达式分解

<!inc\(
(?=.*?\)!>)    // this is the positive lookahead to make sure that the string ')!>`
               // exists before counting this as a match
|
(?<=<!inc\(.*?) // positive look behind to make sure '<!inc(' shows up before
\)!>         

答案 1 :(得分:2)

这是你的正则表达式

<!inc\((?=[^)]+\)!>)|(?<=<!inc\([^)]+)\)!>

当且仅当它具有匹配的<!inc((反之亦然)时,它才会拆分(并删除)每个)!>