2017-01-04 6 views
0

私はプログラマーではないので、私の質問があまりにも基本的すぎる場合はお詫び申し上げます。特定のタグで始まる行以外の文字列

私は翻訳者だとおおよそ次のように構成されているXLIFF(我々の目的のために、プレーンテキスト)文書があります:私は<target>セグメントにおけるドルの金額のすべてのインスタンスを捕獲しようとしています

<source>For workers in the rest of the state, the minimum wage will increase to $9.70 at the end of 2016, then another .70 each year after until reaching $12.50 on 12/31/2020 – after which the minimum wage will continue to increase to $15 on an indexed schedule.</source> 
<target>Для работников остальной части штата минимальная ставка оплаты труда поднимется до $9,70 в конце 2016 года, а затем будет расти на $0,70 ежегодно, достигнув размера в $12,50 31 декабря 2020 года, после чего минимальная ставка будет продолжать повышаться до $15 на основании графика.</target> 

を、ドル記号の後には、1桁または2桁の数字のあとにカンマと2桁の数字を続けることができます。

この目的は、メモ帳++でregex findとreplaceを使用してこれらの式を最終的に置き換えることです。

はこれまでのところ、私は

(\$\d+(\,|\.)?\d*\d*) 

(コンマの代わりに浮遊期間を占める)次の式をテストしたのだが、<source>セグメントのものを含むすべての金額を、返されました。ここでの検索に基づいて、私はlookbehindsを使用して除外しようとしましたが、目的の結果を得ることができませんでした。私はあなたの失敗した試みをあなたと共有しません。

これを達成するにはどうすればよいですか?

ありがとうございました!

答えて

0

これは難しいです。これはこれで、あなたのテキストでのドル金額が一致するのは簡単です:

(\$\d+(?:(?:\.|,)\d{2})?) 

しかし、あなたが唯一の特定のポイントの後に一致させたい場合、あなたはそれの前のものと一致して、\Kを使用して、それを捨てることができます。我々は\Kにタックするので、それだけでそこからマッチングが開始されます、そして、

<source>.*?</source>\s*<target>\K 

:これはsourceものと開口部targetタグのすべてに一致します。今、ドル記号のキャプチャグループの前に.*?を追加することで、最初のグループをキャプチャすることができます。しかし、複数のものをキャプチャしたい場合は、最初のパターンを再帰させる必要があります。 (?1)構文を使用してこれを行うことができます。それは最初のキャプチャグループを繰り返します。

あなたはすべて一緒にそれを置く場合、あなたはこのようなものに終わるだろう:

<source>.*?</source>\s*<target>\K(?:.*?)(\$\d+(?:(?:\.|,)\d{2})?)|((?1)) 

うまくいけば、あなたは正しい方向に向かっます。

Here is a demo

関連する問題