Regex для извлечения строки как внутри, так и снаружи квадратной скобки - PullRequest
0 голосов
/ 18 января 2019

Я нашел много ответов, в которых рассказывается, как извлечь текст в квадратных скобках, а также как извлечь текст вне квадратных скобок, но ни один из них не может сделать то и другое.

У меня есть строка: [Sometext]MoreText[SomeOtherText]

Я надеюсь получить [SomeText], MoreText, [SomeOtherText].

Можно ли это сделать с помощью регулярных выражений? Или мне лучше перебрать строку и извлечь ее таким образом? Мне нужно сохранить порядок.

Ответы [ 2 ]

0 голосов
/ 18 января 2019

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

  • до [ OR
  • после ]

Это можно сделать с помощью механизмов наблюдения .

String yourText = "[Sometext]MoreText[SomeOtherText]";
String[] arr = yourText.split("(?<=\\])|(?=\\[)");
Arrays.stream(arr).forEach(System.out::println);

Выход:

[Sometext]
MoreText
[SomeOtherText]
0 голосов
/ 18 января 2019

Вы можете использовать это регулярное выражение для сопоставления данных в соответствии с вашим образцом в сообщении,

\[(?:[^\]]*)\]|([a-zA-Z]+(?:\s+[a-zA-Z]+)*)

В качестве чередования есть два под-выражения, где \[(?:[^\]]*)\] будет захватывать любой текст, который будет иметь форму [somedata], а ([a-zA-Z]+(?:\s+[a-zA-Z]+)*) регулярное выражение будет захватывать данные формы somedata или somedata somemoredata somemoredatafurther

Демо

Примеры кодов Java,

String s = "[Sometext]MoreText[SomeOtherText] I am hoping to get [SomeText], MoreText, [SomeOtherText]";
Pattern p = Pattern.compile("\\[(?:[^\\]]*)\\]|([a-zA-Z]+(?:\\s+[a-zA-Z]+)*)");
Matcher m = p.matcher(s);
while (m.find()) {
    System.out.println(m.group());
}

печать

[Sometext]
MoreText
[SomeOtherText]
I am hoping to get
[SomeText]
MoreText
[SomeOtherText]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...