• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C# htmlファイルを、preタグを残して加工)

C#でHTMLファイルをpreタグを残して加工する方法

このQ&Aのポイント
  • C#でhtmlファイルのタグを解析するプログラムを作成している際、preタグがある場合にその場所を回避し、解析や置換を行いたい場合、正規表現を使用する方法があります。
  • 普通に改行を取り除くとpreタグの中も一列になってしまうため、preタグの中以外のみ改行を取り除くようにします。
  • 上記のようなファイルがあった場合、正規表現を使用してpreタグ以外の改行を取り除き、preタグの中の改行を維持することができます。

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

  • ベストアンサー
  • oboroxx
  • ベストアンサー率40% (317/792)
回答No.2

Regex reg = new Regex("(?<pre><pre[^>]*>.*</pre>)|(<(\"[^\"]*\"|'[^']*'|[^\"'])*?>)|(?<sentense>[^<>\r\n]+)", RegexOptions.Singleline); を Regex reg = new Regex("(?<pre><pre[^>]*>.*?</pre>)|(<(\"[^\"]*\"|'[^']*'|[^\"'])*?>)|(?<sentense>[^<>\r\n]+)", RegexOptions.Singleline); に置き換えてみてください。

tatapatank
質問者

お礼

度々すみませんでした。 いただいた内容では、どこも変わっていないようですが…。 ただ、処理自体は合っていたようです。誤解をし、 申し訳ありませんでした。 いただいた回答をもとに、再度勉強させていただきます。 ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • oboroxx
  • ベストアンサー率40% (317/792)
回答No.1

こんな感じでしょうか。 public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { OpenFileDialog ofd = new OpenFileDialog(); if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK) { string f = ofd.FileName; Encoding en = Encoding.GetEncoding("shift-jis"); StreamReader sr = new StreamReader(f, en); string text = sr.ReadToEnd(); sr.Close(); Regex reg = new Regex("(?<pre><pre[^>]*>.*</pre>)|(<(\"[^\"]*\"|'[^']*'|[^\"'])*?>)|(?<sentense>[^<>\r\n]+)", RegexOptions.Singleline); MatchCollection mc = reg.Matches(text); foreach (Match m in mc) { this.textBox1.Text += m.Groups[1].Value + m.Groups["pre"].Value + m.Groups["sentense"].Value; } } } }

参考URL:
http://www.oborodukiyo.info/RE/VS2010/RE-Main.aspx
tatapatank
質問者

補足

ご返答、ありがとうございます。 せっかくですが、いただいた方法ですと、 文中にいくつものpreタグがある場合、最初のpre開始タグと 最後の/pre終了タグを大きな塊とみてしまい、正しく 変換できませんでした。 また、何しろ初心者なもので、正規表現の中が 解析できませんでした。 すみませんが、もう一度手ほどきをお願いできますでしょうか。 よろしくお願いいたします。

すると、全ての回答が全文表示されます。

関連するQ&A