我有一个这种格式的字符串
"key1=value1 key2=value2 key3=value3 key2=value6 ...."
键是字母数字,没有空格。键可以在字符串中重复。值可以包含任何值,包括空格,IP地址等。某些值的示例是
Feb 09 2015 12:28:26 UTC
20.201.78.57
asdaaq.org
我需要能够解析字符串并将其拆分为键值对,并能够创建Java映射>。有人可以提出一种拆分字符串的方法。
我尝试了正则表达式^((\b[^\s=]+)=(([^=]|\\=)+))*$
,但这不适用于所有情况
答案 0 :(得分:1)
如果您认为值不包含=
,那么任务就像以下一样简单:
String[] kvPairs = inputString.split("\\s+(?=[A-Za-z0-9]+=)");
(?=[A-Za-z0-9]+=)
是一个零宽度断言,与每个键的开头匹配,后者是字母数字后跟=
,中间没有任何空格。 \s+
匹配1个或多个空白字符并将其视为分隔符,因此结果不会有任何尾随空格。
答案 1 :(得分:1)
尝试这一点,它会通过查找=
使用前瞻符来在键名之前停止。
([\w\d]+)=([^=]*)(?=\s\w+=|$)