2010-01-25 5 views
-2

xml 문자열 내에서 정의되지 않은 태그를 교체해야합니다.정규식을 사용하여 xml 문자열 내에서 정의되지 않은 태그 바꾸기

예 : <abc> <>sdfsd <dfsdf></abc><def><movie></def> (에만 <abc><def> 정의한)

함께 발생한다 : <abc> &lt;&gt;sdfsd &lt;dfsdf&gt;</abc><def>&lt;movie&gt;<def> <><dfsdf>하지 미리 정의 된 것으로하고, 종료 태그가 없다.

정규식으로 처리해야합니다. xml load 등을 사용하지 않습니다.

저는 C# .Net으로 작업하고 있습니다.

고마워요!

+2

중복 : http://stackoverflow.com/questions/2134752/how-can-i-replace-and-in-the-content-of-xml-file-using-regex – Amy

+0

공백이있을 수 있습니까? 태그 '< abc >'? CDATA 영역이있을 수 있습니까? XML 주석이있을 수 있습니까? –

+3

정규식을 사용하지 마십시오. 네가해야한다고 말한 걸 알지만, 너는 어리 석다. http://stackoverflow.com/questions/701166/can-you-provide-some-examples-of-why-it-is-hard-to-parse-xml-and-html-with-a-rege – aronchick

답변

1

정규식을 사용해야합니다! xml로드 등을 사용하지 않습니다.

나는 내 부츠로이 못을 망쳐야합니다! 망치 등을 사용하지 마십시오. 예전 이야기예요.

추가 정보가 필요합니다. "유효한"태그가 중첩되도록 허용됩니까? "유효한"태그는 어느 시점에서 변경 될 가능성이 있습니까? 얼마나 견고해야합니까? 유효한 태그 목록은 언제든지 변경하지 않을 것을 가정

, 당신은 정규식 대체와 함께 할 수 있습니다 :

s/<(?!\/?(your|valid|tags))([^>]*)>/&lt;$1&gt;/g 
+0

그가 준 요구 사항에 따라 잘 작동하는 것처럼 보이지만 안타깝게도 그가 원하는 바가 아니라고 생각합니다. 다른 질문을 읽으면 그는이 모든 사례를 해결할 실제 사례입니다. "> sdfsdf <> asdasd <> asdasd asds <"나는 당신의 대답이이 예제에서 실패 할 것이라고 생각합니다. –

2

이 방법에 대해 :

string s = "<abc> <>sdfsd <dfsdf></abc><def><movie></def>"; 
    string regex = "<(?!/?(?:abc|def)>)|(?<!</?(?:abc|def))>"; 
    string result = Regex.Replace(s, regex, match => 
    { 
     if (match.Value == "<") 
      return "&lt;"; 
     else 
      return "&gt;"; 
    }); 
    Console.WriteLine(result); 

결과 :

<abc> &lt;&gt;sdfsd &lt;dfsdf&gt;</abc><def>&lt;movie&gt;</def> 

또한 다른 테스트 케이스에서 테스트했을 때 (다른 질문) :

<abc>&gt;sdfsdf&lt;&lt;asdada&gt;&gt;asdasd&lt;&gt;asdasd&lt;asdsad&gt;asds&lt;</abc> 

방금 ​​새로운 요구 사항으로 생각했기 때문에 내가이 당신을 위해 작동하지 않습니다 ... 맞춰 볼까 :

<abc>>sdfsdf<<asdada>>asdasd<>asdasd<asdsad>asds<</abc> 

나는이 결과를 얻을? ;)

+0

+1 마지막 줄 – Jay

+0

감사합니다! 감사 ! – Jack

+0

아니요 .... 새로운 요구 사항이 없습니다. 나는 괴롭히는 것에 대해 너무나 유감 스럽다 : 다음에 그것을하지 않을 것이다 :) – Jack

관련 문제