我有一个格式为key: [value1, value2, value3]
的字符串,其中值的出现可以是0,1,2或2以上
即。 key: []
或key: [value1]
或key: [value1, value2]
或key: [value1, value2, value3]
我正在尝试定义一个正则表达式,它将为我提供键和零个或多个值,不包括“,”作为正则表达式中的单独标记。我已经能够分离并获得密钥,但我无法将值作为单独的字符串获取。有人可以帮助我使用正则表达式吗?
答案 0 :(得分:2)
我认为你不能用纯正则表达式做到这一点。最简单的方法可能是获取'key'和'values'([...]
中的所有内容)abd然后将values-string拆分为值数组。
可以使用以下正则表达式:
([^\s=:+)\s*:\s*\[([^\]]*)\]
// E.g., in pseudocode:
(key, valuesStr) = match(pattern, originalString);
valuesArr = originalString.split(",\s*");
另请参阅PHP中的 short demo (其他语言的实现应该类似)。
答案 1 :(得分:0)
您可以使用以下正则表达式在[]中获取值,然后使用','
拆分字符串\[(.*?)\]
','
答案 2 :(得分:0)
你可以使用这个正则表达式
(\\w+):\\s*\\[(.*?)\\]
Group 1
将包含密钥,group 2
包含所有值。
现在您需要将group 2
与,
在java中你可以这样做
1>创建KeyValue类
class KeyValue
{
public final String key;
public final List<String> values;
public KeyValue(final String k,final List<String> val)
{
key=k;
values=val;
}
}
2&gt;现在以这种方式提取
KeyValue kv=null;
Pattern p = Pattern.compile("(\\w+):\\s*\\[(.*?)\\]");
Matcher m = p.matcher(input);
if(m.find())
{
kv=new KeyValue(m.group(1),Arrays.asList(m.group(2).split("\\s*,\\s*")));
}
现在您的数据在KeyValue对象kv
中kv.key;//key Name
for(String s:kv.values)
{
s;//key value
}