Java 如何将读取向量的正则表达式修改为读取矩阵?
我有以下正则表达式,可以读取任意大小的数组,如{1.0,2,3,5.4}:Java 如何将读取向量的正则表达式修改为读取矩阵?,java,regex,matrix,vector,token,Java,Regex,Matrix,Vector,Token,我有以下正则表达式,可以读取任意大小的数组,如{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}}等?我认为您只需要添加外部大括号,并使用可选逗号重复现有模式: 前缀:{(
"\\{\\s*((-?\\b\\d+(?:\\.\\d+)?(?:/\\d+(?:\\.\\d+)?)?\\b)+(\\s*,\\s*(-?\\b\\d+(?:\\.\\d+)?(?:/\\d+(?:\\.\\d+)?)?\\b)+)*\\s*)?\\}"
我如何修改它,使它可以读取任意维度的矩阵,如:{{1.2,3,4},{2,3.4,3}}等?我认为您只需要添加外部大括号,并使用可选逗号重复现有模式: 前缀:{(。 外部的大括号和一个圆括号使现有的正则表达式可以重复
"\\{\\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*)?\\},?)+\\}"
我认为您只需要添加外部大括号,并使用可选逗号重复现有模式: 前缀:{(。 外部的大括号和一个圆括号使现有的正则表达式可以重复
"\\{\\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*)?\\},?)+\\}"
为了使其更具可读性,您的正则表达式可以写成
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*)?\\}";
试验
输出
作为一个单独的长正则表达式
"\\{\\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*)?\\}"
但是,如果您可以像上面那样拆分和构建它,那么阅读起来就容易多了。为了让它更具可读性,您的正则表达式可以写成
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*)?\\}";
试验
输出
作为一个单独的长正则表达式
"\\{\\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*)?\\}"
但如果你能像上面那样拆分和构建它,阅读起来就容易多了