2016-09-16 3 views
1

솔루션으로 HTML 시작 태그의 속성을 삭제합니다메모장 ++ - 정규식

찾기 : <([a-z]+) .?=".?(*/?>)

가 교체 : <\1$2


나는 보통 사이트를 블로그 포럼 사이트에서 테이블을 복사합니다.

모든 시작 태그에 속성이 필요 없습니다.
표는 다음과 같습니다

1|<table unwanted_attribute_1> 
2|<tbody unwanted_attribute_2> 
3|<tr unwanted_attribute_3><td unwanted_attribute_4><br unwanted_attribute_5 /></td></tr> 
4|<tr unwanted_attribute_3><td unwanted_attribute_4><span unwanted_attribute_6></span></td></tr> 
5|</tbody> 
6|</table> 
Attributes like "cellspacing", "class", "style", "href" and "target". 

나는이 대답을 발견하지만 그들은 도움이 될 것 같지 않습니다.
[ A1] : 고정 조건을 사용하여 특정 용어를 찾고 바꿉니다. 하지만 제 상황에서는 시작 태그가 어디 에나 있으며 기사마다 다릅니다.
[ A2] :이 답변을 시도했지만 다음과 같이 작동하지 않습니다.

<([a-z]+) .*=".*">을 찾고 <\1>으로 바꿉니다.
줄 1과 2는 작동하지만 줄 3과 4는 엉망입니다.

정규식은 어떻게 사용해야합니까?

편집 : 그것은 당신의 행의 마지막 ">까지 모든 것을 일치하도록

<table cellspacing="0" class="t_table" style="background-color: #f8f8f8; border-collapse: collapse; border: 1px solid rgb(227, 237, 245); color: #444444; empty-cells: show; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 16px; line-height: 24px; table-layout: auto; width: 673px; word-wrap: break-word;"> 
<tbody style="word-wrap: break-word;"> 
<tr style="word-wrap: break-word;"><td style="border: 1px solid rgb(227, 237, 245); overflow: hidden; padding: 4px; word-wrap: break-word;">◆<a class="relatedlink" href="◆◆◆" style="border-bottom: 1px solid blue; color: #639805; word-wrap: break-word;" target="_blank">◆◆</a>◆◆◆</td><td style="border: 1px solid rgb(227, 237, 245); overflow: hidden; padding: 4px; word-wrap: break-word;">◆◆◆◆<br style="word-wrap: break-word;" />◆◆◆◆</td></tr> 
<tr style="word-wrap: break-word;"><td style="border: 1px solid rgb(227, 237, 245); overflow: hidden; padding: 4px; word-wrap: break-word;">◆◆◆◆◆◆</td><td style="border: 1px solid rgb(227, 237, 245); overflow: hidden; padding: 4px; word-wrap: break-word;">= ◆◆◆◆ =<br style="word-wrap: break-word;" /></td></tr> 
<tr style="word-wrap: break-word;"><td style="border: 1px solid rgb(227, 237, 245); overflow: hidden; padding: 4px; word-wrap: break-word;">◆◆◆◆◆◆</td><td style="border: 1px solid rgb(227, 237, 245); overflow: hidden; padding: 4px; word-wrap: break-word;">= ◆◆◆◆ =<br style="word-wrap: break-word;" /></td></tr> 
<tr style="word-wrap: break-word;"><td style="border: 1px solid rgb(227, 237, 245); overflow: hidden; padding: 4px; word-wrap: break-word;">◆◆◆◆◆◆</td><td style="border: 1px solid rgb(227, 237, 245); overflow: hidden; padding: 4px; word-wrap: break-word;">= ◆◆◆◆ =<br style="word-wrap: break-word;" /></td></tr> 
<tr style="word-wrap: break-word;"><td style="border: 1px solid rgb(227, 237, 245); overflow: hidden; padding: 4px; word-wrap: break-word;">◆◆◆◆◆◆</td><td style="border: 1px solid rgb(227, 237, 245); overflow: hidden; padding: 4px; word-wrap: break-word;">◆◆◆◆</td></tr> 
<tr style="word-wrap: break-word;"><td style="border: 1px solid rgb(227, 237, 245); overflow: hidden; padding: 4px; word-wrap: break-word;">◆◆◆◆◆◆</td><td style="border: 1px solid rgb(227, 237, 245); overflow: hidden; padding: 4px; word-wrap: break-word;">◆◆◆◆</td></tr> 
</tbody></table> 

답변

0

귀하의 .* 욕심이다. 여기에 첫 번째 정규 표현식이 무엇이다 :

https://regex101.com/r/qK5uY3/1

시도 :

<([a-z]+) .*?=".*? *\/?> 

내가 ++ 메모장을위한 플러그인을보고 권 해드립니다. 정규식을 사용하여 HTML을 파싱하는 데는 여러 가지 문제가있을 수 있습니다.

https://regex101.com/r/qK5uY3/2

폐쇄 전에 *\/?> 선택적 공백 및 자동 폐쇄 요소와 일치한다. \h 내가 사용하는 것을 선호하지만 메모장 ++가 (나는 mac'er 임)를 지원하는지 모르겠다.

업데이트 :

는 자기 폐쇄 요소 그룹 전체 닫는 부분의 폐쇄 비트를 캡처합니다.

<([a-z]+) .*?=".*?(*\/?>) 

그런 다음 두 번째로 캡처 된 그룹으로 대체하십시오.

<\1$2 

데모 : 솔루션에 대한 https://regex101.com/r/qK5uY3/3

+0

감사합니다. '. *? *?>'는 라인에서'>'를 구별하는 중요한 포인트입니다. '\ /'는 실제로 선택 사항입니다. 그러나 '
'을 어떻게 보관할 수 있습니까? – Louis55

+0

아, 자기 폐쇄를 유지해야합니까? 나는 그것이 효과가있을 것이라고 생각한다면 생각합니다. https : // regex101.com/r/qK5uY3/3 – chris85

+0

모든 것이 효과적입니다. 다시 한번 감사드립니다. – Louis55

관련 문제