Java 如何为给定类型的字符串生成正则表达式?

Java 如何为给定类型的字符串生成正则表达式?,java,regex,Java,Regex,如何为以下类型的字符串编写正则表达式,以便得到以下格式的响应 "abc, -xyz, lmn, qwe,-yui" 基本上我需要在列表中解析上面的字符串 abc, -xyz lmn qwe, -yui 当连字符(-)ex前面正好有一个空格时,下面的代码工作正常: 但当没有或超过一个空间时不工作,例如: "abc, -xyz" 正则表达式我尝试过: List<String> items = Arrays.stream(order.split("(?!, -),")).map(S

如何为以下类型的字符串编写正则表达式,以便得到以下格式的响应

"abc, -xyz, lmn, qwe,-yui"
基本上我需要在
列表中解析上面的字符串

abc, -xyz
lmn
qwe, -yui
当连字符(-)ex前面正好有一个空格时,下面的代码工作正常:

但当没有或超过一个空间时不工作,例如:

"abc,  -xyz"
正则表达式我尝试过:

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

请提供使用任意数量空格进行解析的代码,并解释其逻辑。

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

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

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

如果您正在解析CSV数据,则使用一些实用程序可能会更容易,而不是为其编写正则表达式。因为要拆分的每个
前面都有一个
,拆分
“,并在每一个元素上重新添加现在缺失的代码> ,但是你可以看到,人们开始猜测你在这里试图解决的问题的本质。因此:考虑告诉我们你为什么要分裂这些字符串,以及它们是从哪里来的。如果你的问题是空白,那么你可以将正则表达式改为<代码>。(?!,\\s+-),“
使用
”(?!,\\s*-),“
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