2011-01-22 13 views
0

ビジネスのブランチの営業時間を保持する要素を含むXMLファイルを変更しようとしています。一部のブランチでは、開始時刻と終了時刻のみを持つXMLファイルと、昼食の終了時刻、昼食後の開始時刻、および終了時刻があるため、XMLファイルは矛盾しています。以下の両方のタイプのXMLファイルを修正するための正規表現のヘルプが必要

例:

<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>time2 - time3</lunch><close>time4</close></monday>

<monday>time1,time2,time3,time4</monday>
を交換<monday><open>time1</open><lunch></lunch><close>time2</close></monday>

<monday>time1,time2</monday>
を置き換えます私はいくつかの間違いをしていますが、これまで私は以下を試してきました:

>#+\.#+,#+\.#+<私はどのように私は何を達成することができますなど「+#」文字列で、それは#+と一致する番号を交換する

を正規表現を言っているので、これはとにかく仕事に行くのではありません理解><open>#+\.#+<open><lunch></lunch><close>#+.\#+<

と私は正規表現やその他の手段でやりたいのですが、正規表現に比較のための式を使用するように指示する方法もありますが、一致する文字のサブセットを置き換えるだけです。

+1

それとも... **だけ**(XPathの/ XQueryのための支援を受けてか、おそらく単にDOM XMLライブラリを使用 - ポイントは** XMLが構成されていると、[常に]そのように扱われるべきである** )。人生をとても複雑にし、誤りを起こしやすい点はありません。また、XSLTを推奨する人もいますが、たいていの場合、良いXMLライブラリを使用することに常に賛成してきました。 XSLT(1.1)であまりにも多くのものは、単に過剰に複雑であり、それがXMLライブラリは、既に知られている汎用的な言語で使用される/ホストすることができたときに、新たな(制限)DSLを学ぶ必要。 –

+0

申し訳ありませんが、わからない場合は、このXMLファイルの構造を改善して、予測可能な結果を​​解析できるようにしています。矛盾がありますので、私はこのXMLファイルを一貫した構造に合わせようとしています。 – conorgriffin

+1

ファイル*がXML構文*に準拠している限り(構造は無関係です)、XMLライブラリを使用できます。構文が「疑わしい」場合(不均衡なタグや不正な名前のエンティティなど)、インポートブリッジとして「あいまいな」XML(通常はHTML)ライブラリを使用することや、単純な「正規化"ステップ。正規表現や手動による解析を使用することは、本当に最後の努力であるべきです。 –

答えて

0

私は予想以上に早くそれを理解しました。ここで私が使用する式は以下のとおりです。

私は、次の検索文字列を使用:

:次の行を一致させるために

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

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

...と、以下の文字列を置換します

<monday>10.00,17.00</monday> 

この結果、次のような出力が得られます。

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

チゼルを使ってネジを締める方法についてアドバイスを求められた場合は、ほとんどの人がドライバーを使用するようアドバイスします。 –

+0

洞察力のある人は、ドライバを使って解決策を教えてください。 – conorgriffin

+0

投稿にコメントを見る:) –