C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: 正規表現の結果をコンソール出力するとき文字が消える。


(過去ログ 130 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■76813 / inTopicNo.1)  正規表現の結果をコンソール出力するとき文字が消える。
  
□投稿者/ nbea3m (1回)-(2015/08/20(Thu) 11:26:09)

分類:[C#] 

C#の質問をさせてください。
以下のコードなのですが、

using System;
using System.Text.RegularExpressions;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string str = @"abc
def
ghi
jkl";
//最後のjlkは大丈夫
            string pattern =".+";
            Regex reg = new Regex(pattern);
            MatchCollection collection = reg.Matches(str);
            foreach (Match item in collection)
            {
                Console.WriteLine(item.Groups[0].Value +" ");//1文字目が消える。

                //こっちは大丈夫。
                //Console.WriteLine(" " + item.Groups[0].Value);

            }

        }
    }
}



出力結果は、

abc
def
ghi
jkl

と期待できると思うのですが、実際には

 bc
 ef
 hi
jkl

となり、a, d, g が消えています。これは一体、どういう理屈なのでしょうか。
ちなみに、

Console.WriteLine("  " + item.Groups[0].Value );

とすると、これは自然な結果になります。


引用返信 編集キー/
■76815 / inTopicNo.2)  Re[1]: 正規表現の結果をコンソール出力するとき文字が消える。
□投稿者/ Azulean (509回)-(2015/08/20(Thu) 12:32:32)
デバッガで Value プロパティを見るとわかりますが、末尾に \r がついています。
これは CR、キャリッジリターンと呼ばれ、行頭に戻るという役割を持ちます。
今回の場合、abc の後に先頭に戻り、その後のスペースで a を上書きしているのでしょう。

末尾の空白文字を消す処理を入れるか、空白文字を含まない正規表現パターンにしてください。
引用返信 編集キー/
■76816 / inTopicNo.3)  Re[2]: 正規表現の結果をコンソール出力するとき文字が消える。
□投稿者/ furu (16回)-(2015/08/20(Thu) 12:51:59)
Azuleanさんが書かれているとおりです。

環境(マシンやOS)にもよりますが
通常、@"" の改行文字は
\r(復帰:キャリッジリターン) + \n(改行:ラインフィード)
なのに対して、
.NET Framework の正規表現の改行文字は
\n(改行:ラインフィード)
の1バイトなので
こういうことが起きてしまいます。
引用返信 編集キー/
■76817 / inTopicNo.4)  Re[3]: 正規表現の結果をコンソール出力するとき文字が消える。
□投稿者/ nbea3m (2回)-(2015/08/20(Thu) 13:06:10)

仰るとおりでした。

お二方、有り難うございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -