2010-05-28 7 views
2

좋아, 쉬운 사람. ActiveReport의 RichTextBox를 사용하여 임의의 HTML 코드 비트를 표시합니다. ActiveReport 지원Regex를 사용하여 특정 HTML 태그 바꾸기

HTML 태그는 여기에서 찾을 수 있습니다 : http://www.datadynamics.com/Help/ARNET3/ar3conSupportedHtmlTagsInRichText.html

내가 원하는 무엇의 예는 텍스트 정렬을위한 지원 태그를 사용하기 위해 <p style=\"text-align:*</p>에 의해 <div style="text-align:*</div>의 일치를 대체합니다. 내 HTML 입력에 정확한 일치를 찾으려면 다음 정규식 표현을 발견했다

:

<div style=\"text-align:(.*?)</div> 

그러나, 나는 내 교체 후 태그에 포함 된 이전 텍스트를 유지하는 방법을 찾을 수 없습니다. 어떤 단서? 나 아니면 Regex가 일반적으로 PITA인가? :)

private static readonly IDictionary<string, string> _replaceMap = 
     new Dictionary<string, string> 
      { 
       {"<div style=\"text-align:(.*?)</div>", "<p style=\"text-align:(.*?)</p>"} 
      }; 

    public static string FormatHtml(string html) 
    { 
     foreach(var pair in _replaceMap) 
     { 
      html = Regex.Replace(html, pair.Key, pair.Value); 
     } 

     return html; 
    } 

고마워요!

+5

RegEx와 HTML은 일반적으로 잘 작동하지 않습니다. http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags –

+1

@Nick Gotch 고맙습니다. 나는 다른 누군가가 선한 싸움에 맞서서 기쁘다. –

답변

4

사용 $1 : 당신은이를 단순화 할 수

{"<div style=\"text-align:(.*?)</div>", "<p style=\"text-align:$1</p>"} 

참고 : 또한

{"<div (style=\"text-align:(?:.*?))</div>", "<p $1</p>"} 

그것은 일반적으로 더 나은 아이디어가 정기적으로 사용하여 HTML을 구문 분석하는 것보다 HtmlAgilityPack 같은 HTML 파서를 사용하는 것입니다 표현. 여기 당신이 그것을 할 수있는 방법은 다음과 같습니다

HtmlDocument doc = new HtmlDocument(); 
doc.LoadHtml(html); 
foreach (var e in doc.DocumentNode.Descendants("div")) 
    e.Name = "p"; 
doc.Save(Console.Out); 

결과 :

대신 구문 분석하고 HTML을 수정하는 것이 더 적합한 도구를 사용해야합니다 regex'es를 사용
 
<p style="text-align:center">foo</p><p style="text-align:center">bar</p> 
3

. 나는 이것을 위해 Html Agility Pack을 추천 할 것입니다 - 당신이 필요로하는 것을하기 위해서 작성되었습니다.

+0

제안 해 주셔서 감사합니다. 그러나 저는 외부 라이브러리가 없어도이를 해결할 수있는 쉬운 방법을 찾고 있습니다. 그래도 Html Agility 팩을 살펴보고 다른 프로젝트에서도 유용 할 수 있습니다! –

+0

matthewpw : 나는 당신이 그의 요점을 놓치고 있다고 생각합니다. HtmlAgilityPack *은 작업을 빠르고 쉽게 해결할 수있는 방법입니다. 정규 표현식은 HTML 구문 분석 용으로 설계되지 않았기 때문에 어려운 문제입니다. –

+1

비슷한 질문에 대한 답변을 확인하십시오. 그것은 StackOverflow 고전이다 : http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 –

관련 문제