如何为给定类型的String制作正则表达式?

时间:2019-07-03 13:17:36

标签: java regex

如何为以下类型的String编写正则表达式,以使我得到以下格式的响应?

"abc, -xyz, lmn, qwe,-yui"

基本上,我需要将List<String>中的字符串解析为

abc, -xyz
lmn
qwe, -yui

在连字符(-)ex之前只有一个空格的情况下,以下代码工作正常:

"abc, -xyz"

但在没有或多于一个空格时不起作用,例如:

"abc,  -xyz"

我尝试过的正则表达式:

List<String> items = Arrays.stream(order.split("(?!, -),")).map(String::trim).map(String::toLowerCase).collect(Collectors.toList());

请提供可解析任意数量空格的代码,并说明相同的逻辑。

1 个答案:

答案 0 :(得分:1)

您实际上可以使用"(.+?)"查找所有结果,而不用拆分字符串。这将找到"之间的所有字符串。这是完整的示例:

String input = "\"abc, -xyz\", \"lmn\", \"qwe,-yui\"";
Pattern pattern = Pattern.compile("\"(?<item>.+?)\"");
Matcher matcher = pattern.matcher(input);
List<String> items = new ArrayList<>();
while (matcher.find()) {
    items.add(matcher.group("item"));
}
items.forEach(System.out::println);

结果将是这样:

abc, -xyz
lmn
qwe,-yui

如果需要,您还可以在将项目添加到列表之前使用.trim(),toLowercase()