0

私はテキストを持っています

<column caption='TZ_Shift' datatype='real' name='[total_millis Parameter]' 
param-domain-type='any' role='measure' type='quantitative' 
value='-0.16666666699999999'>

これも

<column caption='TZ_Shift' value='-0.16666666699999999'>

valueこれは数回繰り返され、その一部を交換したいと思います。

だから私は結果がこのようなものになりたいです

<column caption='TZ_Shift' datatype='real' name='[total_millis Parameter]' 
param-domain-type='any' role='measure' type='quantitative' 
value='-0.73783'>

<column caption='TZ_Shift' value='-0.73783'>

それぞれ、0.73783は新しい値です

一致したテキストの再利用部分を見つけて置き換えるために、この質問c#正規表現を参照しました

しかし、私はソリューションの正規表現を理解することができません

誰かが正規表現で私を助けることができますか?

Xml解析が最善の解決策であるはずですが、(何らかの理由で)xml解析を使用できません。

4

3 に答える 3

2

valueすべての属性の内容のみを変更したい場合は、単に
(<column[^>]* value=')([^']+)('[^>]*>)パターンとして使用し、それを。に置き換え$1-0.73783$3ます。

C#では、これは次のように実行できます。

Regex re = new Regex("(<column[^>]* value=')([^']+)('[^>]*>)");  
string input = @"<column caption='TZ_Shift' value='-0.16666666699999999'>";
string output = re.Replace(input, "$1-0.73783$3");

<column>(編集:要素のみに一致するように正規表現を拡張)

于 2012-04-14T12:53:58.040 に答える
0

入力値が常に同じであるかどうか(つまり、常に-0.16666666699999999である場合)はわかりません。常に同じである場合は、正規表現も必要ありません。

s = s.Replace("-0.16666666699999999", "-0.73783");
于 2012-04-15T02:02:43.527 に答える
0

のようなものと照合して (<column((\s+[\-A-Za-z0-9]+=('[^']*')|("[^"]*"))*)\s+value=)(('[^']*')|("[^"]*"))((\s+[\-A-Za-z0-9]+=('[^']*')|("[^"]*"))*\s*>)、に置き換えてみてください$1'-0.73783'$9

他の誰かが必要に応じてそれをクリーンアップできます。属性の順序が確実で、属性値がすべて「」または可能な組み合わせではなく「」で囲まれている場合は、単純化できます。式で列名を指定すると、さらに複雑になります。

于 2012-04-14T12:35:03.010 に答える