我有一个格式的字符串,key: [value1, value2, value3]
其中值的出现可以是 0、1、2 或超过 2
即key: []
或key: [value1]
或key: [value1, value2]
或key: [value1, value2, value3]
我正在尝试定义一个正则表达式,它将为我提供键和零个或多个值,不包括“,”作为正则表达式的单独标记。我已经能够分离并获取密钥,但无法将值作为单独的字符串获取。有人可以帮我用正则表达式吗?
我有一个格式的字符串,key: [value1, value2, value3]
其中值的出现可以是 0、1、2 或超过 2
即key: []
或key: [value1]
或key: [value1, value2]
或key: [value1, value2, value3]
我正在尝试定义一个正则表达式,它将为我提供键和零个或多个值,不包括“,”作为正则表达式的单独标记。我已经能够分离并获取密钥,但无法将值作为单独的字符串获取。有人可以帮我用正则表达式吗?
我不认为你可以用纯正则表达式来做到这一点。最简单的方法可能是获取“key”和“values”(里面的所有内容[...]
)abd,然后将 values-string 拆分为一个值数组。
可以使用以下正则表达式:
([^\s=:+)\s*:\s*\[([^\]]*)\]
// E.g., in pseudocode:
(key, valuesStr) = match(pattern, originalString);
valuesArr = originalString.split(",\s*");
另请参见 PHP 中的这个简短演示(其他语言的实现应该类似)。
那么你可以使用这个正则表达式
(\\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>现在这样解压
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
}
您可以使用以下正则表达式在 [] 中获取值,然后使用 ',' 拆分字符串
\[(.*?)\]
','