2009-07-21 18 views
0

TTX形式の翻訳用に用意されたjavaプロパティファイルから数千のxmlファイルが生成されています。それらにはかなりの変数が含まれています。私は翻訳者から保護する必要があります。変数は、数字の形をしているか、場合によっては中括弧のペアの間のテキストです。 {0}、{this}。xml要素内にテキストパターンを囲む方法(特定のxml要素の内部にある場合を除く)

私は、彼らがすでに属性でない場合、彼らはまだのような UT要素の内部テキストの一部ではない場合は、XML要素でこれらの変数を囲む必要があり

<ut DisplayText="{0}">&lt;{0}&gt;</ut> 

マイ入力は、次のようになります。

<ut Type="start"DisplayText="string">&lt;string&gt;</ut> text string {0} 
<ut DisplayText="{1}">&lt;{1}&gt;</ut> in: 
<ut DisplayText="\n">&lt;\n/&gt;</ut> {2}. 
<ut Type="end" DisplayText="resource">&lt;/resource&gt;</ut> 

正しい出力はこのようになります。

<ut Type="start"DisplayText="string">&lt;string&gt;</ut> text string <ut DisplayText="{0}">{0}</ut> 
<ut DisplayText="{1}">&lt;{1}&gt;</ut> in: 
<ut DisplayText="\n">&lt;\n/&gt;</ut> <ut DisplayText="{2}">{2}</ut>. 
<ut Type="end" DisplayText="resource">&lt;/resource&gt;</ut> 

私の最初のアプローチは、正規表現を使用して中括弧内の用語にマッチさせ、パターン置換でその周りにxml要素を構築することでした。上記の最初のコードブロックのようにパターンが存在する場合、この方法は失敗します。

前を検索し、patters(メモ帳で++)を置き換える:

({[A-Za-z0-9]*}) 

を探すことが正規表現のように見え始めている

<ut DisplayText="\1">\1</ut> 

を交換して仕事のための適切なツールではありません、だから私はより良いアプローチを取るためのいくつかの提案、さまざまなツール、または私がこれを迅速かつ反復的に解決することができるかもしれないより完全な正規表現さえしたいと思います。

更新:問題は、以前に想定されていたよりも少し複雑であることが判明しました。何らかの条件文のように見えるもので、変数をテキストと混合する、あまりにも明瞭でない構文を含む、保護が必要なものがいくつかあるようです。メモリから:

{o,choice|1#1 error|1&lt;{0,number,integer} errors} 

ここで、「エラー」と「エラー」は翻訳可能であり、保護すべきではありません。私たちが現在持っている最も簡単な解決策は、上記の正規表現を実行し、それが作成するエラーの奇妙な数を修正してから、より複雑なアイテムのパスを置き換えることです。それは、正規表現として抽象化することができますが、今はそれを行うことに多くのポイントはありません。

改良された式に加えて、より良い正規表現サポートを持つxsltや他のエディタへのポインタがありがたいです。時間が許せば、私はいくつかの選択肢を持った遊びをします。

+0

私はこれをテストしませんでしたので、コメントに入れています---データフォーマットが統一されていれば、先読み/見栄えを使わないのはなぜですか? (?<!(= "))({[A-Za-z0-9] *})(?!") – Salty

+0

正規表現でこれを行うことはできますが、Notepad ++ regexesでは実行できません。彼らは、ルックアバウトを含むいくつかの重要な機能を欠いています。あなたは何か他のものを使うことが可能でしょうか? EditPad Proの正規表現サポートは一流です。 –

答えて

0

私は質問でRegexの組み合わせを使用して、手動で発生した異常なエラーを修正しました。理想的ではありませんでしたが、完璧な解決策を見つけるよりも早かったです。

1

私の前提が間違っている場合は教えてください。あなたの例では、{}内にあり、<ut>要素ではないテキストを変更したいようです。私にとっては、これはXSLTを簡単に使用できるように思えます。 UT要素をそのまま出力し、間にあるテキストを処理します。

+0

これは正しいですし、質問の一番下に追加の項目と珍しい構文があります。 – IanGilham

0

何故(?< =。)式を

を使用しようとしない{[A-ZA-Z0-9] +}(?=。$)

これは、このパターンがタグの後ろにある場合は{{1文字以上の}と}を含み、任意の数のスペースANDの後に任意の数のスペースと改行が続きます。

+0

私はもともと似たようなことを試みましたが、変数が自然言語のテキストに含まれていて、すべてのあいまいさとフォーマットの誤りがあると、変数が現れる可能性があるすべての順列をカバーしません。追加の煩わしさについては、アップデートを参照してください。 – IanGilham

関連する問題