0

我有一个格式的字符串,key: [value1, value2, value3]其中值的出现可以是 0、1、2 或超过 2

key: []key: [value1]key: [value1, value2]key: [value1, value2, value3]

我正在尝试定义一个正则表达式,它将为我提供键和零个或多个值,不包括“,”作为正则表达式的单独标记。我已经能够分离并获取密钥,但无法将值作为单独的字符串获取。有人可以帮我用正则表达式吗?

4

3 回答 3

2

我不认为你可以用纯正则表达式来做到这一点。最简单的方法可能是获取“key”和“values”(里面的所有内容[...])abd,然后将 values-string 拆分为一个值数组。
可以使用以下正则表达式:

([^\s=:+)\s*:\s*\[([^\]]*)\]

// E.g., in pseudocode:
(key, valuesStr) = match(pattern, originalString);
valuesArr = originalString.split(",\s*");

另请参见 PHP 中的这个简短演示(其他语言的实现应该类似)。

于 2013-06-02T06:30:26.210 回答
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>现在这样解压

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
}
于 2013-06-02T06:52:03.917 回答
0

您可以使用以下正则表达式在 [] 中获取值,然后使用 ',' 拆分字符串

  • 第 1 步:使用正则表达式获取 [] 内的值:\[(.*?)\]
  • 第2步:使用拆分字符串','
于 2013-06-02T06:12:36.750 回答