2017-02-23 9 views
-1

属性値に二重引用符を使用しないXMLファイルがあります。以下はサンプルです。ご覧のとおり、これらは可能な値です。正規表現*=\s*([^" >]+)を使用して試してみましたが、大部分は="\1"に置き換えましたが、2つの問題があります。
これらについてのお手伝いをいただければ幸いです。RegEx Notepad ++:検索置換を使用してXML属性値に引用符を追加する

  1. 空の値(例:状態)を二重引用符( "")で置換しません。
  2. それは値がsentence.egを有する最初のワード(説明)

サンプル入力置き換え:

<tool id=2 code=abc description=my description end here my_levels=$15,000/$30,000 individual_level= amount=0 status= my_code=P my_date=2017-02-21T00:00:00 points= /> 

期待結果:

<tool id="2" code="123abc" description="my description end here" my_levels="$15,000/$30,000" individual_level="" amount="0" status="" my_code="P" my_date="2017-02-21T00:00:00" points="" /> 
+0

これは正規表現では解決できないでしょう。無効なXMLの生成によって、いくつかの情報が破棄されました。属性値には等号記号が含まれている可能性があるため、解決できない曖昧さがあります(あなたにはそうでないとは確信できません)。唯一の合理的な解決策は、属性値が明白に分かっているソースでXMLの生成を修正することです。 –

+0

私はxmlの値に=を持っていないと確信しています。 – KKR

答えて

1

これを超えてもよいです正規表現ですが、あなたの値に等号シンボルがない限り、次のように動作します:

検索:\b(\w+)=((?:\s*[^=>]+\b(?!=))+)?(\s+|\/?>)

は交換してください:$1="$2"$3

  • \b
  • (\w+)マッチ一つ以上の単語の文字を単語の境界と一致し、 'グループ1' として捉え - $1
  • として置き換えで参照します
  • ( start 'グループ2' - $ 2として置換されて参照されます。
    • は、グループを開始(?:が、キャプチャされません - 私たちはこれを行うので、我々は最後に
      • \s*マッチゼロ以上の空白文字
      • [^=>]+マッチである1つの以上の文字を繰り返すように+文字を使用することができますない=または>
      • \bは別の単語の境界と一致する - これなしで、それは
      • (?!=)を確認します次のプロパティの一部を一致続けることの次のCHA racterは=ではありません。これは否定的な先読みとして知られています。これらは注意してください。正規表現を非効率的にする良い方法です。
    • )+http://www.regular-expressions.info/lookaround.htmlが非キャプチャグループを閉じて、それに合わせ一回以上
  • )?はグループ2を閉じ、
  • (\s+|/?>)作る?文字を使用して、それは、オプションを確認し、それは空白で終わりますかタグの終わり - これを 'グループ3'として捕捉する - 置換として使用する$3
    • \s+空白またはタグの
    • >終了自己終了タグのための
    • /?オプションのスラッシュは

は、ここでは、アクションでそれを参照してください:https://regex101.com/r/zYdzQB/2

いくつかの注意点:

  • 慎重に結果を確認する必要があります
  • これを自動化しないでください。問題を効率的に解決する方法ではありませんが、修正するファイルが壊れている場合は適切です。
  • データがどのように生成されたかを確認してこれを修正することができれば、それを行うほうがずっと良いでしょう。
+0

試しましたが、終了タグの隣にある値に引用符を正しく追加しません。例:points = "3"> – KKR

+0

これに対処するために答えとリンクされた正規表現を更新しました – Theo

+0

ありがとうございました!あなたは素晴らしいです.. – KKR

関連する問題