質問編集履歴

1

例が簡単すぎたため複雑な例に変更

2017/06/14 14:28

投稿

selpo
selpo

スコア41

test CHANGED
File without changes
test CHANGED
@@ -37,3 +37,33 @@
37
37
 
38
38
 
39
39
  もちろん、この場合に限ればSplitで事足りますが、実際にやりたいのはもう少し複雑なので、できれば正規表現で実現してしまいたいです。
40
+
41
+
42
+
43
+ ---
44
+
45
+ [追記]
46
+
47
+ 例が簡単すぎたのでもう少し複雑にします(やりたいことに近づけます)。
48
+
49
+ ```C#
50
+
51
+ var reg = new Regex(@"^(?:((?:\([0-9]+,[0-9]+\))+),)*((?:\([0-9]+,[0-9]+\))+)$");
52
+
53
+ var m = reg.Match("(1,23)(45,6),(3,5),(7,9)");
54
+
55
+ ```
56
+
57
+ この結果がこうなって欲しいです。
58
+
59
+ ```C#
60
+
61
+ //m.Groups = {"(1,23)(45,6),(3,5),(7,9)", "(1,23)(45,6)", "(3,5)", "(7,9)"}; // こうなってほしい
62
+
63
+ m.Groups = {"(1,23)(45,6),(3,5),(7,9)", "(3,5)", "(7,9)"}; // こうなってしまう
64
+
65
+ ```
66
+
67
+ 区切り文字自体は単純(カンマ等)なのですが、区切られている要素にも区切り文字が入ってしまっているので、単純なSplitではできないように思います(区切り文字とみなすかどうかが文脈に依存する)。
68
+
69
+ 現状は自分で括弧の対応を解析して要素の区切りかどうかを識別していますが、これを正規表現だけで実現したいです。