HTML을 자료에서 태그를 제거하려고 합니다. 특히 a 태그 부분만 지우고 싶어요. 다음은 해당 예제 자료입니다.
C# 태그 제거하기
해당 예제에는 여러 가지 태그가 있습니다. 오늘 없애보려는 핵심 태그인 a태그부터, span, label, div, p 등의 태그가 있는 것을 확인할 수 있습니다.
<!DOCTYPE html>
<html>
<body>
<span>
<label for="google-link">구글로 이동</label>
<a id="google-link" href="https://www.google.com/">클릭하세요</a>
</span>
<a href="https://www.daum.net/">다음</a>
<a href="https://www.naver.com/" style="display: inline-block; padding: 10px; background-color: #1F618D; color: white; text-decoration: none;">네이버로 이동</a>
<div>DIV~</div>
<p>P!</p>
</body>
</html>
이때, 위와 같은 메서드를 이용하여 a태그를 제거해 볼 수 있습니다. 핵심은 C#뿐만 아니라 거의 모든 개발언어에서 제공하는 정규표현식입니다.
- 입맛에 따라 가공하세요. 예제에 대한 간단한 안내를 시작하겠습니다.
- path 변수는 바탕화면의 a.txt 파일 경로입니다.
- 스트링빌더 s는 텍스트의 각 라인을 읽으며 변환한 값을 담을 변수입니다.
- 스트림리더로 해당 파일을 읽습니다.
- 라인 변수는 스트림리더의 각 리딩한 라인이며, 값이 null일 때까지 반복합니다.
- 라인 변수에서 "(?:<a.*?>)(.*?)(?:<\\/a>)" 표현식에 일치하는 경우 1번 그룹으로 반환하도록 합니다. 1번 그룹은 a태그 사이의 값입니다. 저는 a태그를 모두 정리하기 위해서 사용합니다.
- 가공한 라인 변수를 스트링빌더 요소에 추가합니다.
- 스트링빌더에 추가한 값의 맨 뒷자리 뉴라인을 정리합니다. 공란이나 null을 입력하는 경우는 고려하지 않았는데, 필요시 if조건이나 try구문으로 점검해 주세요.
- 결과 result 변수를 클립보드에 저장하겠습니다.
void BeomSang()
{
string result = string.Empty;
string line = string.Empty;
string path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\a.txt";
StringBuilder s = new StringBuilder();
using (StreamReader sr = new StreamReader(path))
{
while ((line = sr.ReadLine()) != null)
{
line = Regex.Replace(line, "(?:<a.*?>)(.*?)(?:<\\/a>)", delegate (Match match)
{
return match.Groups[1].Value;
});
s.AppendLine(line);
}
}
result = s.ToString().TrimEnd(System.Environment.NewLine.ToCharArray());
System.Windows.Clipboard.SetText(result);
}
해당 예제 자료를 통해 HTML 태그를 다음과 같이 변경해 볼 수 있습니다.
<!DOCTYPE html>
<html>
<body>
<span>
<label for="google-link">구글로 이동</label>
클릭하세요
</span>
다음
네이버로 이동
<div>DIV~</div>
<p>P!</p>
</body>
</html>