2012-05-22 2 views
0

관련 : https://stackoverflow.com/a/2910549/194031C# 정규식 - 분할 및 분배기 유지

내가 같은 문자열이 있습니다

"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

이렇게하면 시작하는 데 도움이 될 수 있습니다. 당신은 아마 그것을 좀 더 맞출 필요가있을 것입니다.

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

표현 모든 <!inc(과 경우가 분할 (및 제거) 이것은 당신의 정규식

<!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 
\)!>   
+0

+1 - 괄호 안에'. *? '을 둘러 쌀 필요가 없습니다. – Tomalak

+1

'. *?'는 랩핑되지 않았지만, 그 모양은 – climbage

+0

입니다. 맞아, 잊어 버려. ;) – Tomalak

2

을 분해 그것은 일치하는 )!> (반대의 경우도 마찬가지가있는 경우에만).

+0

감사합니다. Tomalak! 이것은 거의 모든 경우에 적용됩니다. 단, 여러 줄 입력으로 갈 때 더 이상 적절하게 분할되지 않습니다. 싱글 라인, 괜찮 았어. 죄송합니다. 이전에 여러 줄을 언급하지 않았으므로 답변에 영향을 미칠 수 있습니다. 또한 RegexOptions.Multiline을 사용하여 시도했지만 도움이되지 않았습니다. – Chad

+0

@Chad Multiline 또는 singleline *은이 정규식에 영향을주지 않아야합니다. 적어도 어떻게 볼 수는 없습니다. – Tomalak