嗨,请帮助我获得正则表达式 以下要求
我的字符串类型为
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";
输入的所有字符串将由":"
分隔,所需的值始终在括号内
由于
答案 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将包含所需的字符串