나는이 질문을하는 법을 잘 알고 있습니다. 스키마 (스키마)를 조정할 거대한 XML에 숫자를 그리는 (대부분) 알파 숫자 목록이 있습니다. 생성 된 방법에 대한 표준이없는 것 같습니다. 그래서 유효성을 검사 할 수 있도록 XSD 정규식 패턴을 만들려고합니다. 일반적으로, 나는 그들을 통해 갈아서지만,이 경우 수백 가지가 있습니다. 내가 뭘 원하는지 각각의 도면 번호의 단일 인스턴스로 그들을 분리하고 그 다음, 나는 XSD에 적절한 OR 문과 정규식을 만들 수 있습니다.정규식을 사용하여 결과 유형의 인스턴스 하나만 표시
내 환경은 Win7이지만 우분투 VM과 Cygwin (현재이 모든 작업을 수행하고있는 곳)이 있습니다. 나는 이것을 할 수있는 리눅스 유틸리티가 있는지 또는 내 grep/sed-fu가 약한 지 모르겠습니다. 나는 브 루트 포스를 제외하고이 문제를 어떻게 줄일 것인지 잘 모른다. (나는이 퍼즐의 다른 조각들에 대해서는이 조각만큼 크지 않았다.)
이 명령 줄 문을 사용하여 그림 "숫자"를 가져 왔습니다. 여기
grep "DrawingNumber" uber.xml | sort | uniq | sed -e :a -e 's/<[^>]*>//g;/</N;//ba'
실제 도면의 일부 샘플입니다 "번호"(수백 개가) : 그것은 단지를 둘러싸는 태그 나에게 유니크을 제공 한 다음 벗겨 그들을 정렬, 도면 번호를 찾습니다
10023C/10024C *<= this is how it's represented in the XML & I can't (easily) change it.
10023C
10043E
10051B
10051D
10058B
10059C
10447B 10447B *<= this is how it's represented in the XML & I can't (easily) change it.
10064A
10079B
10079D
10082B
10095A
10098B
10100B
10102
10109B
10109C
10115
101178
10118F
원하는 것은 도면 번호 목록을 각 유형의 단일 인스턴스로 줄이는 목록입니다. 예를 들어, 도면의이 그룹 "번호"
nnnnnx
내가 너무 같은 패턴을 생성 할 수있는 단일 문자 다음에 5 자리의 모든 인스턴스를 나타내는 :
10023C
10043E
10051B
10051D
10058B
10059C
가에 줄일 수 : 마찬가지로
[0-9]{5}[a-z A-Z]{1}
,
10102
10115
다음 아무것도 5 자리의 모든 인스턴스를 나타낼 것이며 캡처 할 수있는
nnnnn
: 등등
[0-9]{5}
및 53,691,363,210
는로 감소한다. 문제를 실행 가능한 형태로 제시하기에 충분한 정보가되기를 바랍니다. 내가 말했듯이, 나는 질문을 틀 짓는 방법조차도 몰랐고 종종 질문을 썼을 때 나는 해결책을 실현했다. &도 제출하지 않았지만,이 하나가 나를 곤혹스럽게 만든다.
업데이트 : @의 nullrevolution의 답변을 사용 , 여기에 내가 (이 내 의견을 명확히하는보다 크게 읽을 수) 해낸거야.
나는 결국 사용하는 명령 줄은 :이처럼 보였다 데이터에
grep "DrawingNumber" uber.xml | sort -d | uniq | sed -e :a -e 's/<[^>]*>//g;/</N;//ba' | sed 's/[A-Za-z]/x/g;s/[0-9]/n/g' | sort -u
: 나에게 내 모든 데이터를 위하지 니펫에 대한의 총칭 출력 (준
<DrawingNumber>10430A</DrawingNumber>
<DrawingNumber>10431</DrawingNumber>
<DrawingNumber>10433</DrawingNumber>
<DrawingNumber>10434</DrawingNumber>
<DrawingNumber>10443A</DrawingNumber>
<DrawingNumber>10444</DrawingNumber>
<DrawingNumber>10446</DrawingNumber>
<DrawingNumber>10446A</DrawingNumber>
<DrawingNumber>10447</DrawingNumber>
<DrawingNumber>10447B 10447B</DrawingNumber>
<DrawingNumber>10447B</DrawingNumber>
<DrawingNumber>10454A</DrawingNumber>
<DrawingNumber>10454B</DrawingNumber>
<DrawingNumber>10455</DrawingNumber>
<DrawingNumber>10457</DrawingNumber>
) :
nnnnn
nnnnnn
nnnnnx
nnnnnx nnnnnx
nnnnnx/nnnnnx
nnxxx
정확하게 필요한 것은 무엇입니까. 알아야 할 다음 두 가지 사례가이 새로운 방법으로 인해 도움이 될 것입니다. 누가이 시간을 얼마나 절약했는지 알 수 있습니까?
'[a-z A-Z] '의 공백으로 패턴이 실제로 공백 문자와 일치 할 수 있다는 것을 알고 계십니까? –
@ m.buettner, 실제로, 나는 정규식을 만들기 위해 [Rubular] (http://www.rubular.com)를 사용하고 있었고'[a-zA-Z]'라고 말하고있었습니다. 아마 루비 일 (그리고 나는 루비를 모른다),하지만 그것을 지적 해 주셔서 감사합니다. – delliottg