• ベストアンサー

C# String の中の\ をエスケープとして

VisualStudio2010 C# でString 中の\ をエスケープシーケンスとして処理したいです。 String strText = this.textBox1.Text; String strPattern = this.textBox2.Text; String strReplaceText = this.textBox3.Text; strText = Regex.Replace(strText, @strPattern, strReplaceText, RegexOptions.Singleline); this.textBox3 に\r\n と入れて、Regex.Replace で改行として扱いたいんです。でも実際には\r\n は文字として扱われています。 コツを教えてください。

noname#134452
noname#134452

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

  • ベストアンサー
回答No.2

> テキストボックス経由で\r\n を渡されると4バイトの文字列になっちゃう訳です。これを2バイトの\r\n として見なしたいのです・・・ いやだから strPattern = strPattern.Replace(@"\r","\r"); // これで strPattern = strPattern.Replace(@"\n","\n"); // よくね?

noname#134452
質問者

お礼

ありがとうございます。

noname#134452
質問者

補足

strReplaceText = strReplaceText.Replace(@"\r","\r"); 〃 に直しまして対処しました。ありがとうございました。

その他の回答 (1)

回答No.1

using System; using System.Text.RegularExpressions; class Program { public static void Main() { string strText = "Hello\r\nworld"; string strPattern = @"\r\n"; string strReplaceText = "復帰改行"; Console.WriteLine("before : [{0}]", strText); strPattern = strPattern.Replace(@"\r","\r"); // これで strPattern = strPattern.Replace(@"\n","\n"); // よくね? strText = Regex.Replace(strText, strPattern, strReplaceText, RegexOptions.Singleline); Console.WriteLine("after : [{0}]", strText); } } --- 実行結果 --- before : [Hello world] after : [Hello復帰改行world]

noname#134452
質問者

お礼

ありがとうございます。 上記コードをもう一度見直したところ、これぞ力業という事で納得しました。要するに、エスケープシーケンスらしい文字列はエスケープシーケンスにイチイチ置き換えると。 納得できましたのでベストアンサーとしたいのですが、C#なら何かこう簡単な解決法があってもいいきがしますので、もう少しだけ回答を募集させてください!

noname#134452
質問者

補足

ありがとうございます。 ちょっと違うんですが・・・やりたい事は、"復帰改行"じゃなくて"\r\n" なんです。いや"\r\n" とソースに記述すればちゃんと改行として見なされますよね。 テキストボックス経由で\r\n を渡されると4バイトの文字列になっちゃう訳です。これを2バイトの\r\n として見なしたいのです・・・(なんか力業で解決できそうな気がしてきた・・・) C#なら便利な関数があってもよさげな気がします。だれかご存じないですか?

関連するQ&A

  • (C#)1バイトの正規表現

    下記のような正規表現による置換をほどこしました。 Buffer=Regex.Replace(Buffer,"^[\x00-\xff]{100}","",RegexOptions.Singleline); 文字列の先頭の100バイトを削除する正規表現ですが、うまく動作しません。 どうも文字コードに問題があるようなのですが、原因のわかる方いらっしゃいますか?

  • C#でタグを削除する方法

    htmlファイルをtextBoxに読み込んで、その中にあるタグのみを正規表現で削除したいです。 FileStream file = File.Open ( @"c:\test.html", FileMode.Open ); Encoding enc = Encoding.GetEncoding("Shift_JIS"); reader = new StreamReader( file ,enc); StringBuilder text = new StringBuilder(); while(reader.Peek() != -1) {   string A = reader.ReadLine().ToString();   A = Regex.Replace(A,@"<(([^>]|\n)*)>","");   text.Append(A); } textBox1.Text = text.ToString(); とすると、ある程度のタグは削除できるんですが、<DIV などの大文字で書かれたタグが削除できませんでした。 解る方いらっしょいましたら宜しくお願いします。

  • 正規表現で指定したURLに飛びたいのですが・・・・

    お世話になっております。 VB2005ユーザーです。 こちらで回答をいただくみなさんには頭が下がる思いでいっぱいです。 もう少々、お力をお貸しいただけませんか。 宜しくお願いいたします。 当方、環境はVB2005です。 WebBrowserにて、HTMLを操作していくプログラムに挑戦しています。 ある特定の文字列のリンクに飛ぶには、正規表現を使用し、URLを抽出するというところまでわかったのですが、 この正規表現の部分をwindowsフォーム内のテキストボックスの文字列にするにはどのようにしたらよいでしょうか? 以下は当方がチャレンジしましたが、無理だったパターンです。 Dim r As Regex = New Regex( _ "<a\s+[^>]*href\s*=\s*(?:""(?<1>[^""]*)""|(?<1>[^\s>]+))[^>]*\s*.*" + TextBox1.text, _ RegexOptions.IgnoreCase Or RegexOptions.Compiled) Dim m As Match = r.Match(.Document.Body.InnerHtml) Dim St As String = m.Groups(1).Value '拾ってきたコード .Navigate(St) ・・・というようにしました。 上記の「+ TextBox1.text」の部分にテキストボックス内の文字列を挿入したいのです。 「+ TextBox1.text」の箇所を「TextBox1.text"」とすれば「TextBox1.text」自体を探してしまいますし・・・。 ちょっと行き詰ってしまいまして。 ご教授いただければ幸いでございます。 宜しくお願いいたします!!

  • PHPのエスケープシーケンスについての質問です。

    PHPのエスケープシーケンスについての質問です。 下記のコードで改行コードを<br>に置換し、結果を画面に出力しました。 $text = "あいうえお\\nかきくけこ\nさしすせそ"; $text = str_replace("\n", "<br>" , $text); echo $text; 実行結果は下記になりました。 あいうえお\\nかきくけこ さしすせそ 私の予想では、\\nが\<br>に置換され、下記になるかと思いました。 あいうえお\ かきくけこ さしすせそ なぜ\\nは\<br>に置換されず、そのままだったのでしょうか?

    • ベストアンサー
    • PHP
  • C#のToString("c")

    C#で、テキストボックスに金額を記入し、のちに取り出して数値として使いたいのですが、ToString("c")でフォーマットして記入した場合は通貨記号が取れませんでした。 なぜでしょうか? 何か良い方法がありますでしょうか? よろしくお願いいたします。 //ToString("c")を使わないで記入した場合 textBox1.Text = "-\\12345"; string stTarget; stTarget = textBox1.Text; Console.WriteLine("1stTarget=" + stTarget); stTarget = stTarget.Replace(",", ""); Console.WriteLine("2stTarget=" + stTarget); stTarget = stTarget.Replace("\\", ""); Console.WriteLine("3stTarget=" + stTarget); //出力結果 //1stTarget=-\12,345 //2stTarget=-\12345 //3stTarget=-12345 //ToString("c")を使って記入した場合 int tempNum = -12345; textBox1.Text = tempNum.ToString("c"); stTarget = textBox1.Text; Console.WriteLine("1stTarget=" + stTarget); stTarget = stTarget.Replace(",", ""); Console.WriteLine("2stTarget=" + stTarget); stTarget = stTarget.Replace("\\", ""); Console.WriteLine("3stTarget=" + stTarget); //出力結果 //1stTarget=-\12,345 //2stTarget=-\12345 //3stTarget=-\12345

  • VB(2008)で文字列の置き換え

    Dim a As String Dim b As String a = TextBox1.Text b = a.Replace("hogehoge", "fuga") b = a.Replace("piyo","xyzzy") b = a.Replace("foo", "bar") Textbox2.Text= b のようにしているのですが、置き換えることができません。 初歩的な内容ですがどなたかよろしくお願いします。

  • 正規表現 ""で囲まれた内部は処理しない方法

    正規表現でタグ内の項目内容に""をつける処理を考えています。 現在は、= の右側にある内容を""で囲む処理をしています。 C#で書いたコードは次ような感じです。 text = Regex.Replace(text, "(\\S)=([^\"' >]+)","$1=\"$2\"" ,RegexOptions.Singleline); このときに次のようなHTMLコードがあった場合、  <div id=000 class="tayp1,type2">  <div id="111" class=type1>  <img src="200.gif" alt="100+100=200"> すると次のような結果になります。  <div id="000" class="tayp1,type2">  <div id="111" class="type1">  <img src="200.gif" alt="100+100="200""> 3行目はalt内にも=があるため間違った処理をしてしまいます。 誤:alt="100+100="200"" このような""内部は処理しないようにするにはどうすればよろしいでしょうか? ""内部の=にはヒットしななれば…と思っているのですが。 よろしくお願いします。

  • C#で空白行を削除する方法

    C#でテキストを読み込んで、文字列型の変数に代入、そしてtextBoxに表示させます。その中にいくつかの空白だけの行があります。その空白行だけを削除する方法がわかりません。わかる方がいらっしゃいましたらよろしくお願いします。 FileStream file = File.Open(@"C:\text.txt",FileMode.Open); Encoding enc = Encoding.GetEncoding("Shift_JIS"); StreamReader reader = new StreamReader(file,enc); string A = reader.ReadToEnd(); A = Regex.Replace(A,"\r\n",""); textBox1.Text = A; とすると全ての改行が削除されてしまいます。 正規表現をうまくつかうと出来るような気がするんですが・・・

  • mysql_real_escape_stringについて

    マニュアルを見ると以下の説明がありました。 >mysql_real_escape_string() は、MySQL のライブラリ関数 mysql_real_escape_string をコールしています。 >これは以下の文字について先頭にバックスラッシュを付加します。 \x00, \n, \r, \, ', " そして \x1a. phpでpdoを使用しmysqlに登録しているのですがこの結果は正しくエスケープできているでしょうか? // 登録情報配列 $user = array( 'id' => 'test', 'pass' => '\x00 \n \r \ \x1a' ); // 略(登録実行) この結果以下のテキストがmysqlに登録されてます。 「\x00 \n \r \ \x1a」 エスケープ前の値と登録された値がなんら変わらなく見えるのですが気のせいでしょうか? ちなみにシングルクオテ―ションをダブルにすると以下のように登録されました。 「 \ ・」

    • ベストアンサー
    • PHP
  • C#:comboBox1等の部分を関数の引数にしたい

    最近Windowsプログラミングを始めたものです。 Microsoft Visual C# 2008 Express Edition を使っています。 関数において、 string tmp = this.comboBox1.Text; や、 string tmp = this.textBox1.Text; などのように、コントロールのName部分だけを変更したいのですが、こういう事はできるのでしょうか。 現在は以下のように書いています。 (Tabの代わりに全角スペースを使っています。) private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)  {   string tmp = this.comboBox1.Text + "\n";   exfunc(tmp);  } private void exfunc(string str) {  ... }

専門家に質問してみよう