【问题标题】:Regex everything between two strings multiple times多次正则表达式两个字符串之间的所有内容
【发布时间】:2014-03-19 13:41:49
【问题描述】:

我有一个类似

的字符串
[{"id":"9","label":"P","price":"0","oldPrice":"0","products":["606","610","614","618","622","625","629"]},{"id":"8","label":"M","price":"0","oldPrice":"0","products":["607","611","615","619","626","630"]},{"id":"7","label":"G","price":"0","oldPrice":"0","products":["609","613","617","621","624","628","632"]},{"id":"36","label":"GG","price":"0","oldPrice":"0","products":["608","612","616","620","623","627","631"]},{"id":"152","label":"XGG","price":"0","oldPrice":"0","products":["3713","6577","6578","6579","6580","6581","6582"]}]

我需要的是标签值:P、M、G、GG、XGG。我试图获取标签和逗号之间的所有内容,但它不起作用

"(标签)(.*)(,)"

【问题讨论】:

    标签: java regex string matcher


    【解决方案1】:
    (?<=label\"\:)\"\w+\"
    

    这样就可以了

    或者如果你真的想把它解析为 json

    这样做

    var arr = [];
    var jso = [{"id":"9","label":"P","price":"0","oldPrice":"0","products":["606","610","614","618","622","625","629"]},{"id":"8","label":"M","price":"0","oldPrice":"0","products":["607","611","615","619","626","630"]},{"id":"7","label":"G","price":"0","oldPrice":"0","products":["609","613","617","621","624","628","632"]},{"id":"36","label":"GG","price":"0","oldPrice":"0","products":["608","612","616","620","623","627","631"]},{"id":"152","label":"XGG","price":"0","oldPrice":"0","products":["3713","6577","6578","6579","6580","6581","6582"]}];
    console.log(jso.length);
    for(var i=0;i<jso.length;i++){
        arr.push(jso[i].label);
    }
    console.log(arr);
    

    正则表达式演示:http://regex101.com/r/kT9kE6

    【讨论】:

      【解决方案2】:

      此字符串为 JSON 格式,因此建议使用 JSON 解析器而不是使用正则表达式

      http://www.json.org/ 中了解 JSON 格式。

      此链接提供有关 java http://www.json.org/java/ 中 JSON 的说明

      【讨论】:

      • 谢谢,我知道它是 JSON 格式,但我不能使用解析器,它是来自网络爬虫的 String 对象,我无法更改。
      • 您可以解析字符串中存在的 JSON 内容
      【解决方案3】:

      你的正则表达式很贪心。

      改成懒人

      label.*?,

      您还可以使用条件正则表达式仅获取标签值

      使用条件表达式的正则表达式

      (?&lt;="label":")\w+

      Regex Demo

      【讨论】:

        【解决方案4】:

        您可能应该使用 JSON 解析器,但是...

        此正则表达式将捕获组名称“标签”中的所有标签

        .*?(?:label)":"(?<labels>[^"]+)+.*?
        

        或者根据你的执行方式,只需搜索这个匹配项

        (?:label)":"(?<labels>[^"]+)
        

        你可以在这里看到它的工作原理:http://regex101.com/r/fS8jA8

        以及生成的 JAVA(由 regex101 生成):

        String re = "(?:label)\\":\\"(?<labels>[^\\"]+)";
        String str = "[{\"id\":\"9\",\"label\":\"P\",\"price\":\"0\",\"oldPrice\":\"0\",\"products\":[\"606\",\"610\",\"614\",\"618\",\"622\",\"625\",\"629\"]},{\"id\":\"8\",\"label\":\"M\",\"price\":\"0\",\"oldPrice\":\"0\",\"products\":[\"607\",\"611\",\"615\",\"619\",\"626\",\"630\"]},{\"id\":\"7\",\"label\":\"G\",\"price\":\"0\",\"oldPrice\":\"0\",\"products\":[\"609\",\"613\",\"617\",\"621\",\"624\",\"628\",\"632\"]},{\"id\":\"36\",\"label\":\"GG\",\"price\":\"0\",\"oldPrice\":\"0\",\"products\":[\"608\",\"612\",\"616\",\"620\",\"623\",\"627\",\"631\"]},{\"id\":\"152\",\"label\":\"XGG\",\"price\":\"0\",\"oldPrice\":\"0\",\"products\":[\"3713\",\"6577\",\"6578\",\"6579\",\"6580\",\"6581\",\"6582\"]}]
        ";
        
        Pattern p = Pattern.compile(re, Pattern.CASE_INSENSITIVE);
        Matcher m = p.matcher(str);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-05-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-11-01
          • 2011-08-31
          相关资源
          最近更新 更多