帮助编写字符串的正则表达式

时间:2011-09-12 13:11:14

标签: java regex string

嗨,请帮助我获得正则表达式 以下要求

我的字符串类型为

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 个答案:

答案 0 :(得分:4)

正则表达式将是这样的:

: \((.*?)\)

拼写出来:

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

这将捕获括号的内容作为第一个捕获组。

答案 1 :(得分:2)

尝试以下方法:

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

结尾$很重要,否则你会意外地匹配“(s)”。

答案 2 :(得分:2)

如果您分别拥有每个字符串,请尝试以下表达式:\(([^\(]*)\)\s*$

这将为您提供最后一对括号的内容,如第1组。 如果字符串由:连接,请先尝试拆分它们。

答案 3 :(得分:2)

问问自己是否真的需要正则表达式。您需要的文本是否始终显示在最后两个括号中?如果是这样,您可以保持简单并改为使用子字符串:

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);

这比正则表达式更具可读性。

答案 4 :(得分:1)

我假设:和左括号(之间只有空格字符:

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

您将在捕获第1组时找到结果。

答案 5 :(得分:1)

试试这个正则表达式:

.*\((.*)\)

$ 1将包含所需的字符串