- ベストアンサー
正規表現でHTML内の特定の項目内容に""をつける方法
- C#の正規表現を使用して、HTML内の特定の項目内容に""を付ける方法を考えています。
- 現在は=の右側にある内容を""で囲む処理をしていますが、エラーが発生します。
- HTMLタグ内の属性の値だけでなく、文字列内の一部に含まれる=にもヒットしてしまいます。どのようにすれば解決できるでしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#1,#2です。お書きの部分が、[^\"' >]+ となっていたので、空白は除外かと思っていました。 最初から"で囲まれていた場合は、先にマッチさせて元と同じ物に置換すれば良いですね。 text = Regex.Replace(text, "(\\s\\w+)=\"([^\"]*)\"|(\\s\\w+)=([^\"' >]+)","$1$3=\"$2$4\"" ,RegexOptions.Singleline); かな。 ' で囲まれた物も対象にしたければ同じ調子で。
その他の回答 (3)
- rebi_asuna
- ベストアンサー率63% (7/11)
""で囲まれた範囲にある = を "=" にでも置換。 さっきのコードを実行。 置換した部分を元に戻す。 ってなのはどうでしょう。 普段正規表現使わないのでスマートな方法が思いつきませんでした。 ただの置換操作なので予期しないバグがでてくるかも(既存のコードに"="が入ってる場合とか。無いとは思うけど…) 字句解析のほうが正規表現よりは安定そうですね。
- notnot
- ベストアンサー率47% (4900/10358)
>事例として数式を書いたのですが、実は文字列に対応できればと思っています。 数字でも文字でも空白でなければ関係ないです。 alt="aaa bbb=zzz" のように、属性内に空白と= の両方が含まれているケースがあると言うこと??? >たとえば、パラメータのデータなどで""内に=が使われていたりします。 ていうか、それが元の質問の趣旨ですよね?
お礼
はい、ご指摘の通りです。 まさに例に出していただいたような場合にうまくいきません。 私の例として出したのが相応しくありませんでした。 よろしくお願いします。
- notnot
- ベストアンサー率47% (4900/10358)
text = Regex.Replace(text, "(\\s\\w+)=([^\"' >]+)","$1=\"$2\"" ,RegexOptions.Singleline); でどうでしょう?
お礼
回答ありがとうございます。 事例として数式を書いたのですが、実は文字列に対応できればと思っています。 たとえば、パラメータのデータなどで""内に=が使われていたりします。 よろしくお願いします。
お礼
回答ありがとうございます! 目的通りに処理ができました。 ""で囲まれているものと囲まれていないものという分け方はとても思いつきませんでした。 とても勉強になりました。 ありがとうございます。