プロが教えるわが家の防犯対策術!

visual studio 2005 C#で
指定文字数による文字列分割をしたいのですが
何とか正規表現で一発で書けないかと考えております。
指定文字数による文字列分割は、ちょっと言い方が分からないので、下の例をみていただければ、と思います。

例えば指定文字数が2文字の場合
"あいうえお"を以下のような配列で取得したいです。
[0]"あい"
[1]"いう"
[2]"うえ"
[3]"えお"

例えば指定文字数が3文字の場合
[0]"あいう"
[1]"いうえ"
[2]"うえお"


これを
[0]"あい"
[1]"うえ"
というような分割はできるのですが、上記のような重複した感じでの取得ができません。
MatchCollection mc = Regex.Matches("あいうえお", "..");

ちょっと言い方が下手で分かりにくいかもしれませんが、よろしくお願いいたします。

A 回答 (3件)

.NETの現行の正規表現の仕様では多分できません。


というのも、たとえば(先頭から)2文字マッチさせると注目点は
マッチしただけ移動しますが、要求されている動作では注目点は1文字しか
移動してはいけないことになるからです。

Perl6で導入が予定されている :ov (:overlap) 修飾子があれば
お望みの動作ができるかもしれません。

参考URL:http://svn.perl.org/perl6/doc/trunk/design/syn/S …
    • good
    • 0
この回答へのお礼

なるほど。ありがとうございました。
正規表現自体の勉強も兼ねていたので、勉強になりました。ありがとうございました。

お礼日時:2006/06/23 16:38

これってむしろsubstringでやった方がいいんじゃないかと思ったりw

    • good
    • 0
この回答へのお礼

ありがとうございます。
今組んでいるプログラムの方ではsubstringで実装したいと思います。
ただ、正規表現で表現できるかどうかは気になりますので、引き続き掲示とさせていただきます。

お礼日時:2006/06/22 15:35

下記のように行えば言っているとおりの実装が可能ですが?


正規表現を使ってという方法は思いつきません。

string a="あいうえお"; //対象の文字列
int b=2; //指定文字数
string[] c= new string[a.Length-(b-1)]; //格納用配列
for(int i= 0;i<a.Length-(b-1) ;i++)
{
c[i] = a.Substring(i,b);
}
    • good
    • 0
この回答へのお礼

ありがとうございます。
仰るとおりfor文等でやった方がよさそうですね。
「これって正規表現で一発でいけるのかな?」と思い立って、質問させていただいた次第です。

お礼日時:2006/06/22 15:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!