有没有一种简单的方法可以将此文本解析为Map

Ara*_*ram 7 java regex algorithm groovy parsing

我收到服务的回复如下.如何解析这个Map?我首先考虑在空白处拆分,但它不起作用,因为值可能包含空格,例如在下面的响应中查看SA键的值.

我想到的一个选项是在空白处拆分,前提是前一个字符是双引号.虽然不知道怎么写这个正则表达式.

TX ="0000000000108000001830001"FI =""OS ="8"CI ="QU01SF1S2032"AW ="SSS"SA ="1525 Windward Concourse"

zie*_*mer 4

按引号解析。您甚至可以使用正则表达式来查找每个键/值对,假设每个值都在引号中。我唯一的问题是,如果值包含嵌入引号,则规则是什么?(它们是否使用“\”之类的转义?无论如何,这目前在下面没有考虑到......)

例如:

(\w+)="([^"]*)"
Run Code Online (Sandbox Code Playgroud)

这甚至会给你组 #1 和 #2,可分别用于提供键和值。

使用 Java 的方法循环运行它Matcher.find(),直到找到所有对。

示例代码:

String input = "TX=\"0000000000108000001830001\" FI=\"\" OS=\"8\" CI=\"QU01SF1S2032\" AW=\"SSS\" SA=\"1525 Windward Concourse\"";

Pattern p = Pattern.compile("\\s*(\\w+)=\"([^\"]*)\"\\s*");

Matcher m = p.matcher(input);
while(m.find()){
    System.out.println(m.group(1));
    System.out.println(m.group(2));
}
Run Code Online (Sandbox Code Playgroud)

输出:

TX
0000000000108000001830001
FI

OS
8
CI
QU01SF1S2032
AW
SSS
SA
1525 Windward Concourse
Run Code Online (Sandbox Code Playgroud)

  • 天哪,只需使用单引号即可;它被标记为 Groovy :) (2认同)