У меня есть строка, подобная следующей:

String s = 100[leetcode].

Могу ли я разделить его на массив строк с помощью метода split()?

String[] arr = s.split("\\s*]+\\s*");

Таким образом, результирующий массив становится:

["100"] ["["] ["leetcode"] ["]"].

Я не могу понять правильное регулярное выражение, необходимое для этого. Кто-нибудь может помочь в этом?

1
Arpan Das 28 Окт 2019 в 19:02
2
Например, (?<=\S)(?=[\[\]])|(?<=[\[\]])(?=\S) regex101.com/r/PlhVOr/1 См. ideone.com/5KZeAN
 – 
The fourth bird
28 Окт 2019 в 19:07
Известная цитата: «Некоторые люди, сталкиваясь с проблемой, думают: «Я знаю, я буду использовать регулярные выражения». Теперь у них две проблемы». Серьезно, если требуемое регулярное выражение такое же уродливое, как предложенное, тогда ваши будущие сопровождающие будут благодарны вам за написание простого метода, который проходит по строке и разбивает ее там, где он видит [ или ]
 – 
drekbour
28 Окт 2019 в 19:54

1 ответ

Одним из вариантов может быть использование обходных путей

(?<=\S)(?=[\[\]])|(?<=[\[\]])(?=\S)
  • (?<=\S) Положительный просмотр назад, если то, что находится слева, не является пробельным символом
  • (?=[\[\]]) Положительный просмотр вперед, если то, что справа, равно [ или ]
  • | Или
  • (?<=[\[\]]) Положительный просмотр назад, f то, что слева, либо [, либо ]
  • (?=\S) Положительный просмотр вперед, если то, что находится справа, не является пробельным символом

демонстрация регулярных выражений | демонстрация Java

Например в Java

String s = "100[leetcode]";
String[] arr = s.split("(?<=\\S)(?=[\\[\\]])|(?<=[\\[\\]])(?=\\S)");
1
The fourth bird 28 Окт 2019 в 19:12