• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:正規表現 ""で囲まれた内部は処理しない方法)

正規表現でHTML内の特定の項目内容に""をつける方法

このQ&Aのポイント
  • C#の正規表現を使用して、HTML内の特定の項目内容に""を付ける方法を考えています。
  • 現在は=の右側にある内容を""で囲む処理をしていますが、エラーが発生します。
  • HTMLタグ内の属性の値だけでなく、文字列内の一部に含まれる=にもヒットしてしまいます。どのようにすれば解決できるでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.4

#1,#2です。お書きの部分が、[^\"' >]+ となっていたので、空白は除外かと思っていました。 最初から"で囲まれていた場合は、先にマッチさせて元と同じ物に置換すれば良いですね。 text = Regex.Replace(text, "(\\s\\w+)=\"([^\"]*)\"|(\\s\\w+)=([^\"' >]+)","$1$3=\"$2$4\"" ,RegexOptions.Singleline); かな。 ' で囲まれた物も対象にしたければ同じ調子で。

muuuuu
質問者

お礼

回答ありがとうございます! 目的通りに処理ができました。 ""で囲まれているものと囲まれていないものという分け方はとても思いつきませんでした。 とても勉強になりました。 ありがとうございます。

その他の回答 (3)

回答No.3

""で囲まれた範囲にある = を "=" にでも置換。 さっきのコードを実行。 置換した部分を元に戻す。 ってなのはどうでしょう。 普段正規表現使わないのでスマートな方法が思いつきませんでした。 ただの置換操作なので予期しないバグがでてくるかも(既存のコードに"="が入ってる場合とか。無いとは思うけど…) 字句解析のほうが正規表現よりは安定そうですね。

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.2

>事例として数式を書いたのですが、実は文字列に対応できればと思っています。 数字でも文字でも空白でなければ関係ないです。 alt="aaa bbb=zzz" のように、属性内に空白と= の両方が含まれているケースがあると言うこと??? >たとえば、パラメータのデータなどで""内に=が使われていたりします。 ていうか、それが元の質問の趣旨ですよね?

muuuuu
質問者

お礼

はい、ご指摘の通りです。 まさに例に出していただいたような場合にうまくいきません。 私の例として出したのが相応しくありませんでした。 よろしくお願いします。

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.1

text = Regex.Replace(text, "(\\s\\w+)=([^\"' >]+)","$1=\"$2\"" ,RegexOptions.Singleline); でどうでしょう?

muuuuu
質問者

お礼

回答ありがとうございます。 事例として数式を書いたのですが、実は文字列に対応できればと思っています。 たとえば、パラメータのデータなどで""内に=が使われていたりします。 よろしくお願いします。