C# と VB.NET の質問掲示板
ASP.NET、C++/CLI、Java 何でもどうぞ
C# と VB.NET の入門サイト
Re[2]: 正規表現 連続する\マークは対象外にしたい
(過去ログ 162 を表示中)
掲示板トップ
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
>>
このトピックに書きこむ
過去ログには書き込み不可
管理者用
-
Child Tree
-