我将获取字符串为app1(向下)和app2(向上) 括号中的文字表示应用程序的状态,它们可能会上升或下降,
现在我需要使用正则表达式来获取应用程序的状态,如逗号分隔字符串
ex:生病获取app1(UP)和app2(DOWN) 要求结果UP,DOWN
答案 0 :(得分:2)
使用这样的RegEx很容易:
clearfix
\\((.*?)\\)
输出:
UP,DOWN,
Java 8:使用String x = "app1(UP) and app2(DOWN)";
Matcher m = Pattern.compile("\\((.*?)\\)").matcher(x);
String tmp = "";
while(m.find()) {
tmp+=(m.group(1))+",";
}
System.out.println(tmp);
StringJoiner
输出:
UP,DOWN
(上次String x = "app1(UP) and app2(DOWN)";
Matcher m = Pattern.compile("\\((.*?)\\)").matcher(x);
StringJoiner sj = new StringJoiner(",");
while(m.find()) {
sj.add((m.group(1)));
}
System.out.print(sj.toString());
已删除)
答案 1 :(得分:0)
import java.util.ArrayList;
import java.util.List;
import java.util.regex.*;
public class ValidateDemo
{
public static void main(String[] args)
{
String input = "ill get app1(UP) and app2(DOWN)";
Pattern p = Pattern.compile("app[0-9]+\\(([A-Z]+)\\)");
Matcher m = p.matcher(input);
List<String> found = new ArrayList<String>();
while (m.find())
{
found.add(m.group(1));
}
System.out.println(found.toString());
}
}
我的第一个java脚本,请怜悯
答案 2 :(得分:0)
考虑以下代码:
private static final Pattern RX_MATCH_APP_STATUS = Pattern.compile("\\s*(?<name>[^(\\s]+)\\((?<status>[^(\\s]+)\\)");
final String input = "app1(UP) or app2(down) let's have also app-3(DOWN)";
final Matcher m = RX_MATCH_APP_STATUS.matcher(input);
while (m.find()) {
final String name = m.group("name");
final String status = m.group("status");
System.out.printf("%s:%s\n", name, status);
}
这会从输入行中获取尽可能多的应用状态条目,因为它们确实存在,并将每个应用名称及其状态放入适当的变量中。它取决于你,你想如何处理它们(打印或其他)。
另外,如果有其他状态而不是UP和DOWN(如UNKNOWN),这会给你带来优势,这仍然有效。
减去,如果括号中的句子带有某个名称前缀,那实际上不是应用程序的名称,括号的内容不是应用程序状态。
答案 3 :(得分:-1)
将其用作正则表达式并在http://regexr.com/上进行测试 [UP] | [DOWN]