Помощь в написании регулярного выражения для строки - PullRequest
0 голосов
/ 12 сентября 2011

Привет, пожалуйста, помогите мне получить регулярное выражение для следующего требования

У меня есть строковый тип как

String vStr = "Every 1 nature(s) - Universe: (Air,Earth,Water sea,Fire)";
String sStr = "Every 1 form(s) - Earth: (Air,Fire) ";

из этих строк после использования регулярного выражения, мне нужно получить значения как "Air,Earth,Water sea,Fire" и "Air,Fire"

, что означает после

String vStrRegex ="Air,Earth,Water sea,Fire";
String sStrRegex ="Air,Fire";

Все входные строки будут разделены на ":", а необходимые значения всегда заключены в скобки

Спасибо

Ответы [ 6 ]

4 голосов
/ 12 сентября 2011

Регулярное выражение будет выглядеть примерно так:

: \((.*?)\)

прописано:

Pattern p = Pattern.compile(": \\((.*?)\\)");
Matcher m = p.matcher(vStr);
// ...
String result = m.group(1);

Это захватит содержание скобок как первую группу захвата.

2 голосов
/ 12 сентября 2011

Спросите себя, действительно ли вам нужно регулярное выражение. Всегда ли нужный текст отображается в двух последних скобках? Если это так, вы можете сохранить его простым и использовать вместо него подстроку:

String vStr = "Every 1 nature(s) - Universe: (Air,Earth,Water sea,Fire)";

int lastOpeningParens = vStr.lastIndexOf('(');
int lastClosingParens = vStr.lastIndexOf(')');
String text = vStr.substring(lastOpeningParens + 1, lastClosingParens);

Это гораздо удобнее для чтения, чем регулярное выражение.

2 голосов
/ 12 сентября 2011

Если у вас есть каждая строка отдельно, попробуйте это выражение: \(([^\(]*)\)\s*$

Это даст вам содержимое последней пары скобок в группе 1. Если строки объединены с помощью :, попробуйте сначала разбить их.

2 голосов
/ 12 сентября 2011

Попробуйте следующее:

\((.*)\)\s*$

Важно окончание $, иначе вы случайно совпадете с "(s)".

1 голос
/ 12 сентября 2011

Попробуйте это регулярное выражение:

.*\((.*)\)

$ 1 будет содержать необходимую строку

1 голос
/ 12 сентября 2011

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

Pattern regex = Pattern.compile(":\\s+\\((.+)\\)");

Вы найдете свои результаты в группе захвата 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...