2012-09-13 2 views
0

한 줄에있는 데이터 문자열이 있습니다.Ruby와 정규 표현식을 사용하여 여러 문자열을 개별적으로 선택

<record xmlns:f="http://abc.com/"> 
<f:Table><f:Row><f:Cell>#1</f:Cell></f:Row><f:Row><f:Cell>Data 222</f:Cell></f:Row><f:Row>   <f:Cell>Version: v3</f:Cell></f:Row><f:Row><f:Cell>Serial Number: 000000000</f:Cell></f:Row> <f:Row><f:Cell>Signature: 123</f:Cell></f:Row><f:Row><f:Cell>Issuer:</f:Cell></f:Row><f:Row> <f:Cell>C=EE,</f:Cell></f:Row><f:Row><f:Cell>ST=ABC,</f:Cell></f:Row><f:Row><f:Cell>L=avavv,</f:Cell></f:Row><f:Row><f:Cell><f:HexDump><f:Line seq=""0x0000"" hex=""09 09 4f 3d 5a 65 72 6f 54 75 72 6e 61 72 6f 75"">..O=ABC</f:Line><f:Line seq=""0x0010"" hex=""6e 64 20 4f c3 9c 2c"">nd OÇ.,</f:Line></f:HexDump></f:Cell></f:Row><f:Row><f:Cell>OU=abc,</f:Cell></f:Row><f:Row><f:Cell>CN=trtrtrtr,</f:Cell></f:Row><f:Row><f:Cell>E=null,</f:Cell></f:Row><f:Row><f:Cell>Create: 03/03/2010 14:58</f:Cell></f:Row><f:Row><f:Cell>Expire: 04/02/2010 14:58</f:Cell></f:Row><f:Row><f:Cell>Subject:</f:Cell></f:Row><f:Row><f:Cell>C=EE,</f:Cell></f:Row><f:Row><f:Cell>ST=SS,</f:Cell></f:Row><f:Row><f:Cell>L=Tartu,</f:Cell></f:Row><f:Row><f:Cell><f:HexDump><f:Line seq=""0x0000"" hex=""09 09 4f 3d 5a 65 72 6f 54 75 72 6e 61 72 6f 75"">..O=ZeroTurnarou</f:Line><f:Line seq=""0x0010"" hex=""6e 64 20 4f c3 9c 2c"">nd OÇ.,</f:Line></f:HexDump></f:Cell></f:Row><f:Row><f:Cell>OU=KKK,</f:Cell></f:Row></f:Table> 

내 루비 정규식 포함은 다음과 같습니다

<f:HexDump>[\s\S]*,<\/f:Line><\/f:HexDump> 

그래서 나는 <f:HexDump><f:/HexDump> 태그 둘 사이에 (태그 포함) 모두를 제거하려고하지만 그 사이에 물건을 떠날거야.

제 정규식은 두 번째 <f:/HexDump> 태그 사이에서 모든 것을 선택하는 것이 문제입니다.

<f:HexDump><f:Line seq=""0x0000"" hex=""09 09 4f 3d 5a 65 72 6f 54 75 72 6e 61 72 6f 75"">..O=ABC</f:Line><f:Line seq=""0x0010"" hex=""6e 64 20 4f c3 9c 2c"">nd OÇ.,</f:Line></f:HexDump></f:Cell></f:Row><f:Row><f:Cell>OU=abc,</f:Cell></f:Row><f:Row><f:Cell>CN=trtrtrtr,</f:Cell></f:Row><f:Row><f:Cell>E=null,</f:Cell></f:Row><f:Row><f:Cell>Create: 03/03/2010 14:58</f:Cell></f:Row><f:Row><f:Cell>Expire: 04/02/2010 14:58</f:Cell></f:Row><f:Row><f:Cell>Subject:</f:Cell></f:Row><f:Row><f:Cell>C=EE,</f:Cell></f:Row><f:Row><f:Cell>ST=SS,</f:Cell></f:Row><f:Row><f:Cell>L=Tartu,</f:Cell></f:Row><f:Row><f:Cell><f:HexDump><f:Line seq=""0x0000"" hex=""09 09 4f 3d 5a 65 72 6f 54 75 72 6e 61 72 6f 75"">..O=ZeroTurnarou</f:Line><f:Line seq=""0x0010"" hex=""6e 64 20 4f c3 9c 2c"">nd OÇ.,</f:Line></f:HexDump> 

Ruby 정규식을 사용하여이를 수행 할 수 있습니까?

+6

XML입니다. 정규 표현식을 사용하는 텍스트가 아닌 XML 파서를 사용하여 XML을 XML로 구문 분석해야합니다. 특히 중첩 된 항목을 일치시키려는 경우. – Ryan

+0

그래, 노 코기 리를 시도했지만 제거해야 할 요소를 얻는 데 어떤 성공도 없었습니다. 아마 그것의 심하게 형성된 때문입니다. – user1513388

+0

''''을 의미합니까? 다행히 문자열 치환으로 해결할 수 있습니다 :) (그게 아니라면 nokogiri가주는 오류는 무엇입니까?) – Ryan

답변

1

당신은 정규식을 사용할 수 있습니다

/<f:HexDump>.*?<\/f:HexDump>/ 

여기 ?를 사용하여 비 욕심 Hexdump에서는 태그 사이의 일부를 만드는 키입니다. 당신의 문자열을 가정

는 STR에 저장됩니다, 당신은 일을 모든 Hexdump에서는 태그의 제거 얻을 수 있습니다 : 당신은 (끝에 m를 추가 정규식을위한 멀티 라인 모드를 활성화 할 수 있습니다

str.gsub(/<f:HexDump>.*?<\/f:HexDump>/, '') 

주) 태그 사이에 왕복 객차가있을 수 있습니다.

+0

니스 - 덕분에 누락되었습니다. 완벽하게 작동합니다! – user1513388

관련 문제