문제

다음 문자열이 있습니다.

<div id="mydiv">This is a "div" with quotation marks</div>

정규식을 사용하여 다음을 반환하고 싶습니다.

<div id='mydiv'>This is a "div" with quotation marks</div>

DIV의 ID 속성이 이제 아포스트로피로 어떻게 둘러싸여 있습니까?

정규 표현으로 어떻게 할 수 있습니까?

편집하다: 나는 모든 상황에서 모든 엣지 케이스를 처리 할 마법의 총알을 찾고 있지 않습니다. 우리는 모두 HTML을 구문 분석하기 위해 Regex를 사용하는 데 지쳐야하지만,이 특별한 경우와 특별한 요구에 대해 Regex가 해결책입니다 ... 올바른 표현을 얻는 데 약간의 도움이 필요합니다.

#2 편집 : Jens는 저를위한 솔루션을 찾는 데 도움을 주었지만이 페이지에 무작위로 오는 사람은이 솔루션을 사용하는 것에 대해 길고 매우 어렵다고 생각해야합니다. 제 경우에는 내가 다룰 줄의 유형에 대해 매우 확신하기 때문에 작동합니다. 나는 위험과 위험을 알고 있으며 당신이 할 수 있습니다. 당신이 알고 있는지 확실하지 않다면 아마도이 방법을 모르고 사용해서는 안된다는 것을 나타냅니다. 당신은 경고를 받았습니다.

도움이 되었습니까?

해결책

이것은 다음과 같은 방식으로 수행 될 수 있습니다. 모든 인스턴스를 교체하고 싶다고 생각합니다. ", 그것은 a 사이입니다 < 그리고 a > ~와 함께 '.

그래서 당신은 각각을 찾습니다 " 파일에서 뒤를 찾으십시오 <, 그리고 앞서 a >. regex는 다음과 같습니다.

(?<=\<[^<>]*)"(?=[^><]*\>)

찾은 문자를 원하는 것으로 바꿀 수 있습니다. Regex.Replace.

참고 : 스택 오버플로 커뮤니티가 가장 친절하고 도움이되는 것을 발견했지만,이 REGEX/HTML 질문은 너무 많은 분노로 응답합니다. 결국,이 질문은 "REGEX가 모든 유효한 HTML과 일치하고 다른 어떤 것과 일치하지 않는지 묻지 않습니다."

다른 팁

당신은 일치 할 수 있습니다 :

(<div.*?id=)"(.*?)"(.*?>)

그리고 이것을 대체합니다.

$1'$2'$3

나는 당신이 이런 종류의 대체물을 수행하기 위해 Regex를 사용하는 위험을 알고 있습니다. 입력 문서가 변경 될 때 계속 작동하는 솔루션을 갖고 싶다면 훨씬 더 '안정적인'방법을 찾는 사람들에 대해 다음 답변을 추가했습니다.

HTML 민첩성 팩 사용 (프로젝트 페이지, 너겟), 이것은 트릭을 수행합니다 :

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml("your html here"); 
// or doc.Load(stream);

var nodes = doc.DocumentNode.DescendantNodes();

foreach (var node in nodes)
{
    foreach (var att in node.Attributes)
    {
         att.QuoteType = AttributeValueQuote.SingleQuote;
    }
}

var fixedText = doc.DocumentNode.OuterHtml;
//doc.Save(/* stream */);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top