【问题标题】:How can I modify the regular expression that reads vectors to read matrices?如何修改读取向量以读取矩阵的正则表达式?
【发布时间】:2018-11-29 18:57:45
【问题描述】:

我有以下正则表达式可以读取任意大小的数组,例如 {1.0, 2, 3, 5.4}:

"\\{\\s*((-?\\b\\d+(?:\\.\\d+)?(?:/\\d+(?:\\.\\d+)?)?\\b)+(\\s*,\\s*(-?\\b\\d+(?:\\.\\d+)?(?:/\\d+(?:\\.\\d+)?)?\\b)+)*\\s*)?\\}"

如何修改它以使其能够读取任意维度的矩阵,例如:{{1.2, 3,4},{2,3.4,3}} 等?

【问题讨论】:

    标签: java regex matrix vector token


    【解决方案1】:

    我认为您只需要添加外部花括号并使用可选逗号重复现有模式: 字首: {(。 外部花括号和左括号,以便可以重复现有的正则表达式。

    "\\{\\s*((-?\\b\\d+(?:\\.\\d+)?(?:/\\d+(?:\\.\\d+)?)?\\b)+(\\s*,\\s*(-?\\b\\d+(?:\\.\\d+)?(?:/\\d+(?:\\.\\d+)?)?\\b)+)*\\s*)?\\}"
    

    追加:,?)+}。 逗号 - 问号使其可选 然后关闭括号并允许它重复 1 次或多次 最后是结束的外花括号

    将它放在一起并添加获取所需的转义:

    "\\{(\\{\\s*((-?\\b\\d+(?:\\.\\d+)?(?:/\\d+(?:\\.\\d+)?)?\\b)+(\\s*,\\s*(-?\\b\\d+(?:\\.\\d+)?(?:/\\d+(?:\\.\\d+)?)?\\b)+)*\\s*)?\\},?)+\\}"
    

    【讨论】:

      【解决方案2】:

      为了使其更具可读性,您的正则表达式可以写成

      String numRegex = "(-?\\b\\d+(?:\\.\\d+)?(?:/\\d+(?:\\.\\d+)?)?\\b)+";
      String regex = "\\{\\s*(" + numRegex + "(\\s*,\\s*" + numRegex + ")*\\s*)?\\}";
      

      虽然我确实认为numRegex 部分不正确,因为它允许使用诸如1/2-3.4/5-6/7 之类的文本

      现在您想将其包装在 { xxx , xxx , ... } 构造中,所以

      String regex2 = "\\{\\s*(" + regex + "(\\s*,\\s*" + regex + ")*\\s*)?\\}";
      

      测试

      System.out.println("{{1.2, 3,4},{2,3.4,3}}".matches(regex2));
      System.out.println("{{1.2, 3,4},{2,3.4,3},}".matches(regex2));
      

      输出

      true
      false
      

      作为一个单一的长正则表达式

      "\\{\\s*(\\{\\s*((-?\\b\\d+(?:\\.\\d+)?(?:/\\d+(?:\\.\\d+)?)?\\b)+(\\s*,\\s*(-?\\b\\d+(?:\\.\\d+)?(?:/\\d+(?:\\.\\d+)?)?\\b)+)*\\s*)?\\}(\\s*,\\s*\\{\\s*((-?\\b\\d+(?:\\.\\d+)?(?:/\\d+(?:\\.\\d+)?)?\\b)+(\\s*,\\s*(-?\\b\\d+(?:\\.\\d+)?(?:/\\d+(?:\\.\\d+)?)?\\b)+)*\\s*)?\\})*\\s*)?\\}"
      

      但如果你可以像上面那样拆分和构建它,它会更容易阅读。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-12
        • 2017-05-17
        • 2017-01-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多