2009-11-06 1 views
0

머리글과 바닥 글을 바꾸어 수정하려는 html 파일 집합이 있습니다. 각 파일의 내용이 다르므로 정규 표현식을 사용하고 싶습니다 (또는 RE가 다중 행 쿼리를 처리 할 수없는 경우 유사).표준 머리글 및 바닥 글을 사용하여 html 파일 집합을 수정/업데이트하는 방법

예를 들어, <html>과 </head > 사이의 모든 것을 표준 헤더로 바꾸는 것이 하나의 수정입니다.

정규식으로이 작업을 수행 할 수 있습니까? 어떤 방법으로 대량 검색을 수행하고 C#에서 이와 같이 바꿀 수 있습니까?

여러 줄과 일치하는 정규 표현식의 예를 제공 할 수 있습니까?

답변

0

그럼 간단한 대답은 예입니다.

Regex가 실제로 도움이 될 수 있지만 여러 파일을 처리하는 도구가 필요합니다. 지금은 어떤 것도 추천 할 수 없지만 "여러 파일 검색 및 바꾸기"라는 Google 검색을 시도해보십시오. Regex는 여러 줄 또는 한 줄 일치를 처리 할 수 ​​있습니다.

필자는 Notepad ++를 사용하여 검색을 수행하거나 여러 파일 (열거 나 디렉토리 트리 내에서)을 바꿀 수 있지만 일차적 인 목적은 아닙니다.

어려운 부분은 "대체"표현식에서 사용할 수있는 적절한 캡처 그룹을 유지해야하는 세부 사항을 선택해야하는 곳에서 "일치"를 정의하는 것입니다.

다시 말해서 도움이 될 수 있지만 귀하의 질문은 매우 높은 수준입니다.

C# 부분에서는 일단 정규 표현식을 정의하면 간단합니다. 당신은 그것을 유용한 페이지를 찾을 수 있습니다

static void Main() 
{ 
    // Remove everything (by commenting out) everything between HTML 
    // and the end of the HEAD tag. 
    string matchRegex = "<html[^>]*>(.*?)</head>"; 
    string replaceExpression = "<html> <!-- \0 </head> -->"; 

    string pattern = "*.html"; 

    using (DirectoryInfo di = new DirectoryInfo(.)) 
    { 
      foreach (FileInfo fi in di.GetFiles(pattern)) 
      { 
       using (StreamReader sr = fi.OpenText()) 
       { 
        // Going from memory here, may need to use a TextReader... 
        string content = fi.ReadToEnd(); 

        // Treat as single-line so that the match can span 
        // several lines. 
        string newContent = Regex.Replace(content, 
                 matchRegex, 
                 replaceExpression, 
                 RegexOptions.Singleline); 

        // Write-out/overwirte your new file here.... 
       } 
      } 
    } 
} 

누군가는 그것은 정규식 사고 과정을 보여줍니다 등, 여러 줄 주석을 처리, 의견을 일치하는 정규 표현식을 작성하려고합니다. Finding Comments in source code. replace 부분은 쉽고, 캡쳐 그룹을 넣고 그룹/이름을 대체 문자열로 참조하십시오!

+0

html 파일 컬렉션을 반복하는 C# 코드를 작성하려고합니다. 따라서이 텍스트 편집기를 사용하지 않을 것입니다. 여러 행에 걸쳐 일치하는 RE를 수행하는 방법에 대한 예가 있습니까? – NickGPS

+0

도움 주셔서 감사합니다. 나는 <과 >을 인코딩하지 않았으므로 질문을 편집하여 질문을 조금 모호하게 만들었습니다. 루프를 작성하는 방법을 이해합니다. 여러 줄과 일치 할 수있는 정규 표현식의 예가 무엇입니까? – NickGPS

+1

^및 $의 동작을 변경하려면 RegexOptions.Multiline 또는 RegexOptions.Singleline을 전달하십시오. Multiline = "^ 및 $의 의미를 변경하여 전체 문자열의 시작과 끝이 아닌 모든 줄의 처음과 끝에 각각 일치시킵니다." –

관련 문제