Regex를 사용하여 html 태그를 정리하려고 하는데요, 예시는 span 태그를 기준으로 안내해 드리려고 해요.
일부 span 태그가 정리가 이상하게 되어 확인을 해보았더니, replace 코드에서 <span><span></span></span>과 같은 중첩된 태그의 처리가 제대로 되지 않는 부분을 발견하였습니다.
정규 표현식은 보통 중첩 구조를 다루는 데 적합하지 않기 때문에, 작성한 코드가 정규 표현식이 중첩된 태그 구조를 놓친 것이지요. 😭
외부 라이브러리가 아닌 내부 정규 표현식으로 해결하려면, 더 복잡한 표현식을 사용하거나 반복적으로 여러 번 태그를 제거하는 방식을 시도할 수 있어요.
정규 표현식을 계속 사용하고자 할 경우, 다음과 같은 방법을 사용해볼 수 있습니다.
- 중첩 태그가 여러 번 있는 상황을 고려하여, 단계적으로 태그를 제거합니다.
- 중첩된
span을 처리할 때 모든 태그를 처리하는 것이 아니라, 외부span태그부터 순차적으로 처리하는 방법을 사용할 수 있습니다.
단계별 접근 방식
- 중첩된
<span>태그 처리: 먼저 모든<span>태그를 일괄적으로 제거하는 방법을 사용합니다. 그 후, 결과 문자열에서 남은 텍스트만 추출합니다. - 반복적으로 적용: 여러 번
replace를 수행하여 모든 중첩을 제거합니다.
코드 예시
아래는 C#에서 중첩된<span> 태그를 처리하기 위한 정규 표현식 예시입니다:using System;
using System.Text.RegularExpressions;
public class Program
{
public static void Main()
{
string input = "input";
// 중첩된 span 태그를 처리하는 정규 표현식
string pattern = @"<span[^>]*?>(.*?)<\/span>";
string output = input;
// 모든 중첩 태그 제거할 때까지 반복
while (Regex.IsMatch(output, pattern))
{
output = Regex.Replace(output, pattern, "$1");
}
Console.WriteLine(output);
}
}
설명
- 정규 표현식:
@"<span[^>]*?>(.*?)<\/span>"는<span>태그를 찾고 해당 태그의 내용을$1로 대체합니다. 여기서$1은 캡처된 그룹의 내용을 의미해요. - 반복 구조:
while루프를 사용하여 더 이상<span>태그가 없는 경우까지 반복적으로 정규 표현식을 적용해요. - 출력 결과: 위 코드를 실행하면 모든 중첩된
<span>태그가 제거되고, 해당 태그 안의 내용만 남아요.
이 방법을 통해 중첩된 <span> 태그를 정규 표현식으로 효과적으로 처리할 수 있어요. 중첩 구조의 깊이에 따라 실행 시간이 증가할 수 있지만, 필요한 경우 반복적으로 적용하여 모든 태그를 제거할 수 있을 거예요.
