2011-01-22 3 views
0

비즈니스의 영업 시간을 나타내는 요소가 들어있는 XML 파일을 수정하려고합니다. XML 파일은 일부 브랜치의 경우 시작 시간과 종료 시간 만있는 것이므로 다른 파일은 시작 시간, 점심 시간, 점심 시작 시간 및 종료 시간을 가지기 때문에 일관성이 없습니다. 아래의 두 가지 유형의XML 파일을 수정하는 데있어 regex 도움이 필요합니다.

예 :

<monday> 
    <open>10.00</open> 
    <lunch></lunch> 
    <close>17.00</close> 
</monday> 

<monday> 
    <open>09.00</open> 
    <lunch>12.30 - 13.30</lunch> 
    <close>17.00</close> 
</monday> 

나는 BBEdit에서 정규 표현식을 사용하려고했습니다 : 같은 아래 것과 내가 더 나은 형식으로 이러한 문자열을 포맷 할

<monday>10.00,17.00</monday> 
<monday>09.00,12.30,13.30,17.00</monday> 

내 Mac에서 변경 사항을 적용 할 수 있지만 어려움을 겪고 있습니다. 구체적으로 말하자면 정규식을 사용하여 텍스트의 하위 집합을 대체 할 수있는 방법이 확실하지 않기 때문입니다. 예를 들어, 의사 코드에 나는 정규 표현식이 작업을 수행 할 :

<monday><open>time1</open><lunch></lunch><close>time2</close></monday>

<monday>time1,time2</monday>
내가 정규식 너무 익숙하지 않다 <monday>time1,time2,time3,time4</monday>
<monday><open>time1</open><lunch>time2 - time3</lunch><close>time4</close></monday>

로 대체 대체 내가 너무 몇 가지 오류가 있습니다.하지만 지금까지 아래에서 시도해 보았습니다.

>#+\.#+,#+\.#+<><open>#+\.#+<open><lunch></lunch><close>#+.\#+<

와나는이 나는 등의 문자열 '# +'로 #+와 일치 숫자를 대체 할 정규 표현식을 말하고 있기 때문에 어쨌든 작동하지 않을 이해

나는 무엇을 달성 할 수있는 방법 나는 정규 표현식이나 다른 방법으로하고 싶다. 또한 정규 표현식에 비교를 위해 표현식을 사용하도록 지시하는 방법은 있지만 일치하는 문자의 서브 세트 만 바꾸는 방법은 무엇인가?

+1

또는 ** XML 라이브러리 **를 사용하십시오. (XPath/XQuery 또는 DOM 만 지원됩니다 ** XML은 구조화되어 있으므로 항상 ** 취급되어야합니다 **). 인생을 복잡하고 오류를 범하기 쉽지 않습니다. 어떤 사람들은 XSLT를 추천하기도하지만, 대부분의 경우 좋은 XML 라이브러리를 사용하기를 항상 부탁했습니다. XSLT (1.x)에서 너무 많은 것들이 지나치게 복잡하고 이미 알려진 범용 언어로 XML 라이브러리를 호스팅/사용할 수있는 경우 새로운 (제한된) DSL을 학습해야합니다. –

+0

죄송합니다. 명확하지 않은 경우이 XML 파일의 구조를 개선하려고하므로 예측 가능한 결과로 구문 분석 할 수 있습니다.불일치가 있으므로 XML 파일을 일관된 구조로 만들려고 노력하고 있습니다. – conorgriffin

+1

파일 *이 XML 구문 * (구조가 관련 없음)을 준수하는 한 XML 라이브러리를 사용할 수 있습니다. 구문이 "의심 스럽다"(예 : 불균형 태그 및/또는 불법 명명 된 엔터티 등) 경우 가져 오기 브리지로 "퍼지"XML (일반적으로 HTML) 라이브러리를 사용하거나 간단한 "정규화 "단계. 정규 표현식 또는 수동 구문 분석을 사용하는 것은 실제로 마지막 단계의 노력이어야합니다. –

답변

0

글쎄, 나는 예상보다 빨리 생각해 냈습니다.

나는 다음 찾기 문자열을 사용 :

(<[a-z]+day>)([0-9]+\.[0-9]+),([0-9]+\.[0-9]+)(</[a-z]+day>) 

을 ... 그리고 교체 다음 문자열 :

:

\1<open>\2</open><lunch></lunch><close>\3</close>\4 

다음 줄에 맞게 여기 내가 사용하는 표현입니다

<monday>10.00,17.00</monday> 

다음 출력 결과 :

<monday><open>10.00</open><lunch></lunch><close>17.00</close></monday> 
+2

끌을 사용하여 나사를 조이는 방법에 대한 조언을 구한 경우 대부분의 사람들은 드라이버를 사용하라고 조언합니다. 한 시간 후에 돌아와서 우리는 모두 한숨을 내며 한숨 돌릴 것입니다. –

+0

통찰력있는 드라이버를 사용해 해결책을 제시해보십시오. – conorgriffin

+0

게시물에 대한 의견보기 : –