2013-10-04 3 views
1

메모장 + +로 일부 svg 좌표를 구문 분석하려고합니다. 각 레이어의 좌표 집합을 가져 와서 [] 안에 좌표를 넣어서 자바 스크립트 배열에서 사용할 준비가되었습니다.문자열을 제외한 파일의 모든 것을 삭제하는 정규식

<?xml version="1.0" encoding="utf-8"?> 
<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In . SVG Version: 6.00 Build  43363) --> 
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="800px" 
height="900px" viewBox="0 0 800 900" enable-background="new 0 0 800 900" xml:space="preserve"> 
<g id="Layer_3"> 
<polyline fill="none" stroke="#0000FF" stroke-width="3" points="33,108 66,141 99,174 99,207 132,207 165,207 165,240  "/> 
</g> 
<g id="Layer_4"> 
<polyline fill="none" stroke="#0000FF" stroke-width="3" points="132,306 165,306 165,339 165,372 132,405 99,405 99,438 132,438 
    165,438  "/> 
</g> 
<g id="Layer_5"> 
<polyline fill="none" stroke="#0000FF" stroke-width="3" points="198,339 231,339 264,372 297,372 330,405 363,438 396,438  "/> 
</g> 
<g id="Layer_6"> 
<polyline fill="none" stroke="#0000FF" stroke-width="3" points="198,174 198,273 231,306 264,306  "/> 
</g> 
<g id="Layer_7"> 
<polyline fill="none" stroke="#0000FF" stroke-width="3" points="231,174 231,240 264,273 297,273  "/> 
</g> 
<g id="Layer_9"> 
<polyline fill="none" stroke="#0000FF" stroke-width="3" points="396,306 462,306 495,339 495,372 528,405 528,438 561,438 
    594,471  "/> 
</g> 
<g id="Layer_10"> 
<polyline fill="none" stroke="#0000FF" stroke-width="3" points="660,504 561,504 495,504  "/> 
</g> 
</svg> 

내가 이런 걸보고 결과를 싶습니다 :

은 SVG 파일은 다음과 같습니다

[33,108 66,141 99,174 99,207 132,207 165,207 165,240] 

[132,306 165,306 165,339 165,372 132,405 99,405 99,438 132,438 165,438] 

[198,339 231,339 264,372 297,372 330,405 363,438 396,438] 

[198,174 198,273 231,306 264,306] 

[231,174 231,240 264,273 297,273] 

[396,306 462,306 495,339 495,372 528,405 528,438 561,438 594,471] 

[660,504 561,504 495,504] 

나는 정규 표현식에 아주 새로운 해요,하지만 여기 내 미약 한 시도이다 : 대

검색 :. ". (+") + 포인트 =

교체 [$ 1]

검색 부분이 "points"문자열 위의 줄을 검색하지 않는 것 같아서 붙어 있습니다. 문서에 훨씬 더 많은 쓰레기가 있더라도 좌표 이외의 모든 것을 제거 할 수 있습니까?

+1

XML을 정규식으로 구문 분석하지 마십시오. 실제 XML 파서를 사용하십시오. 이것은 SO에 대해 약 백만 번 언급되었습니다. 망치를 사용할 수 있도록 손톱을 모두 만들지 말고 적절한 도구를 사용하십시오. –

+1

저는 동적으로 구문 분석하지 않습니다. Notepadd ++가 이런 기본적인 오프라인 편집 작업을하지 않아야하는 이유를 설명해 주시겠습니까? –

+1

하지만, 일회성 일이라면 여러 연산을 사용하여 필요한 결과를 얻을 수 있으며 단일 정규식에서 시도하고 수행 할 필요가 없습니다. 되풀이 작업 (정기적으로 수행해야하는 작업) 인 경우 XML 파서를 사용하면 크게 단순화 할 수 있습니다. (나는 혼란 스럽다. 어쨌든, 당신의 질문은 "포인트"값을 구하는 것에 대해 질문하지만, "포인트"가 사용되지 않는 이유는 묻는다. 당신은 "포인트"값을 물었다. " "c"로 시작하는 단어. 잠깐. 첫 번째 "c"단어 앞에 "a"와 "b"단어가 올바르게 작동하지 않습니다. ") –

답변

0

우선 Ken White와 XML을 정규식으로 파싱하지 않는 것에 대해 공통적으로 동의해야합니다.

찾기 :

.+?points="(.+?)\s*" 

바꾸기 :이 하나를 시도 ++ 메모장에서 신속하고 더러운 솔루션을 원한다면 (옵션 ". 줄 바꿈과 일치"를 확인하는 것을 잊지 마세요)

[$1]\n\n 

이것은 입니다.은 예상 결과를 제공합니다 (여전히 일부 후행 문자를 수동으로 제거해야합니다).

+0

감사합니다! 특히 ". matches newline"은 귀중한 정보였습니다! 당신의 솔루션은 훌륭하게 작동했습니다! –

관련 문제