2009-12-08 3 views
1

Я хотел бы разделить строку такой какRegex для разделения

"[1-5]?3456[2-5][4-D]" 

в

array[0] = "[1-5]" 
array[1] = "?" 
array[2] = "3" 
array[3] = "4" 
array[4] = "5" 
array[5] = "6" 
array[6] = "[2-5]" 
array[7] = "[4-D]" 

Может кто-нибудь сказать мне, если это возможно с регулярным выражением, разделяющая?

я получил три элемента "3" письмо (которое может быть 1-9 и AF, "?" А whitecard, "[1-5]" диапазон (1-9 равно + АФ)

Edit: Примеры, которые соответствуют являются

"[1-5]?3456[2-5][4-D]" 

"?4A9[1-F]?[A-D]1" 

"12459987" 

"[1-F][1-F][1-F][1-F][1-F][1-F][1-F][1-F]" 
+0

Может ли вы дать нам несколько примеров строк, который соответствует вашему шаблону? –

+0

/([0-9A-F?] | \\ [[0-9A-F] - [0-9A-F] \\]) ([0-9A-F?] | \\ [[0- 9A-F] - [0-9A-F] \\]) ([0-9A-F] | \\? [[0-9A-F] - [0-9A-F] \\]) ([ 0-9A-F] | \\ [[0-9A-F] - [0-9A-F] \\]) ([0-9A-F] | \\? [[0-9A-F]? - [0-9A-F] \\]) ([0-9A-F] | \\? [[0-9A-F] - [0-9A-F] \\]) ([0-9A- F] | \\ [[0-9A-F] - [0-9A-F] \\]) ([0-9A-F] | \\? [[0-9A-F] - [0- 9A-F] \\])/ работает, но немного уродливый ... – Kai

ответ

8

Испытано с Expresso:

(\[[^]]+\])|. 

Чтобы использовать это выражение, чтобы получить шпагат, вы можете использовать следующий код:

var input = "[1-5]?3456[2-5][4-D]"; 
var pattern = new Regex(@"(\[[^]]+\])|(.)", 
         RegexOptions.CultureInvariant | RegexOptions.Compiled); 

IEnumerable<string> parts = from m in pattern.Matches(input).Cast<Match>() 
          select m.Captures[0].Value; 
+0

Разница между моим ответом и Ричардом заключается в том, что его команда вернет пустую пару кронштейнов вместе как «[]», тогда как моя разделит ее на 2 результата »[«, »]». – scwagner

+0

картина неизвестна vs рассказывает мне ... как это может быть? – Kai

+0

@Kai: код обновлен, попробуйте еще раз –

0

Попробуйте это:

string pattern = @"(\[[1-9A-F?]-[1-9A-F?]\])|[1-9A-F?]"; 
string input = "[1-5]?3456[2-5][4-D]"; 
MatchCollection matches = Regex.Matches(input, pattern); 

foreach (Match m in matches) 
    Console.WriteLine(m.Value);