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

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

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

正規表現 連続する\マークは対象外にしたい

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

■93518 / inTopicNo.1)  正規表現 連続する\マークは対象外にしたい
  
□投稿者/ 青い子豚 (2回)-(2019/12/17(Tue) 15:24:44)

分類:[.NET 全般] 

ある文字列を\マーク1字で区切りたいのですが、連続する\マークは対象外にしたく
以下のようなコードを書きました。

Dim res = Regex.Split("aa\bb\\ccc\\\\ddd", "[^\\]\\[^\\]")
'結果
'a
'b\\ccc\\\\ddd


結果は希望通りに分割されたのですが、他にもっとスマートな書き方や一般的な書き方があるのではと思っています。

ご存じでしたらどうかご教授いただけないでしょうか?
よろしくお願いいたします。
引用返信 編集キー/
■93522 / inTopicNo.2)  Re[1]: 正規表現 連続する\マークは対象外にしたい
□投稿者/ shu (1211回)-(2019/12/17(Tue) 17:30:58)
No93518 (青い子豚 さん) に返信

一般的にそのような処理を行うか分かりませんが
結構スマートだと思います。
ただ
"(?<=[^\\])\\(?=[^\\])"
としないと
aa
bb\\ccc\\\\ddd
このようにならないのですが、大丈夫ですか?(\の前後の文字が区切りとして消えてしまいます)
後、先頭、末尾の\はどうしましょう?
もし分離するのであれば
"(?<=[^\\]|^)\\(?=[^\\]|$)"

引用返信 編集キー/
■93523 / inTopicNo.3)  Re[1]: 正規表現 連続する\マークは対象外にしたい
□投稿者/ 魔界の仮面弁士 (2531回)-(2019/12/17(Tue) 17:54:17)
No93518 (青い子豚 さん) に返信
> ある文字列を\マーク1字で区切りたいのですが、連続する\マークは対象外にしたく

ということは、各要素内の \ の数は偶数個(0個、2個、4個…)であることが保証されるのですね。
それでは、下記の点はどのようにエスケープされる想定でしょうか。


(1) 空要素はどういう扱いになりますか?
 たとえば「abc」「」「xyz」の 3 要素の場合、「abc\\xyz」になってしまい、
 単一要素「abc\\xyz」と区別できません。


(2) 末尾の \ 要素と、先頭の \ 要素の扱いはどうなりますか?
 たとえば「C:\\」+「Windows」と「C:」+「\\Windows」は
 共に"C:\\\Windows" になってしまい、区別できません。

引用返信 編集キー/
■93683 / inTopicNo.4)  Re[2]: 正規表現 連続する\マークは対象外にしたい
□投稿者/ 青い子豚 (3回)-(2020/01/09(Thu) 16:12:52)
No93523 (魔界の仮面弁士 さん) に返信
> ■No93518 (青い子豚 さん) に返信
>>ある文字列を\マーク1字で区切りたいのですが、連続する\マークは対象外にしたく
>
> ということは、各要素内の \ の数は偶数個(0個、2個、4個…)であることが保証されるのですね。
> それでは、下記の点はどのようにエスケープされる想定でしょうか。
>
>
> (1) 空要素はどういう扱いになりますか?
>  たとえば「abc」「」「xyz」の 3 要素の場合、「abc\\xyz」になってしまい、
>  単一要素「abc\\xyz」と区別できません。
>
>
> (2) 末尾の \ 要素と、先頭の \ 要素の扱いはどうなりますか?
>  たとえば「C:\\」+「Windows」と「C:」+「\\Windows」は
>  共に"C:\\\Windows" になってしまい、区別できません。
>

ありがとうございました。
解決したのに、お礼と解決チェックを忘れていました。

正規表現の先読み、後読みを勉強してきます。
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


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

このトピックに書きこむ