2016-06-23 4 views
1

Мне нужно разбить String на основе некоторого условия.split String на основе выражения регулярного выражения []. [] И []. [] From []. [] + []. []

вот моя входная строка

"([abcd_1]. [Колонка] + [ab_cd_2]. [Колонка])/[ab_cd_3]. [Колонка]"

вход строка будет содержать только

AZ аз подчеркивание (_) и цифры (0-9)

То, что я хочу

[abcd_1]. [Колонка]

[ab_cd_2]. [Колонка]

[ab_cd_3]. [Колонка]

Я не уверен, какое условие я должен использовать.

до сих пор я попытался это, но не в состоянии построенного выражения регулярных выражений, чтобы разделить точную строку

Regex rgx = new Regex(@"\[(.*?)\]"); 
    String regexpString = "([abcd_1].[column] + [ab_cd_2].[column])/[ab_cd_3].[column]"; 
    MatchCollection mc = rgx.Matches(regexpString); 

Пожалуйста, предложите на этом

ответ

3

Вы можете использовать

\[[^][]*](?:\.\[[^][]*])* 

См regex demo.

Или ваш путь с ленивой точкой: \[.*?](?:\.\[.*?])*.

Дело в том, что вы можете добавить группу без захвата с . и вашим первоначальным шаблоном и применить к ней * (ноль или более).

Вот C# demo:

Regex rgx = new Regex(@"\[.*?](?:\.\[.*?])*"); 
String input = "([abcd_1].[column] + [ab_cd_2].[column])/[ab_cd_3].[column]"; 
MatchCollection matches = rgx.Matches(input); 
foreach (Match m in matches) 
     Console.WriteLine(m.Value); 

Узор объяснение:

  • \[ - литерал [
  • [^][]* - ноль или больше символов, кроме [и] (может заменить на .*? - кроме символа новой строки, но как можно вернуть правильный матч)
  • ] ноль или более символов - буквальный ] (не обязательно, чтобы избежать его вне класса полукокса, но вы можете)
  • (?:\.\[[^][]*])* - ноль или более (* в конце) вхождений (в (?:...) используется для группирования ниже подшаблонами):
    • \. - буквальное точка (должны быть экранированы вне символьного класса [...])
    • \[ - а [
    • [^][]* - ноль или более других, чем [и]
    • ] герои - ]
+0

Я пытался использовать его. он говорит «непризнанная escape-последовательность» –

+0

@AmeyaDeshpande: Не знаю, как вы это пробовали. Я тестировал оба выражения. См. ['\ [[^] [] *] (?: \. \ [[^] [] *]) *'] (Http://ideone.com/PonKME) тест. –

+0

yup Это сработало. Я очень сильно забыл символ '@' при запуске строки. –

Смежные вопросы