繁体   English   中英

正则表达式(分数的分母)

[英]Regular expressions (denominator of a fraction)

太好了,我想我已经解决了,我做了什么:

String pattern = "(<=|>=)\\s{0,2}((+]\\s{0,2})?(\\d+\\s{0,2}[/]\\s{0,2}(\\d{2,}|[1-9])\\s{0,2}|\\d+[.]\\d{1,2}|\\d+))\\s{0,2}";

该模式有问题,我已经在上面进行了更正,现在可以正常工作了:)

我有一个不等式,可能包含> =或<=,一些空格和一个数字。 该数字可能是整数,带2个小数位的十进制数字或一个小数,我想用“ Matcher”检索不等式的第二个成员上的数字。 例:

4x1 + 6x2 <= 40/3

我已经尝试构建这样的模式,但是我能够找到它。 但是后来我想起了一个分数不能被零除的原因,所以我也想检查一下。 为此,我使用了以下代码:

String inequation = "4x1 + 6x2 <= 40/3";
String pattern = "(<=|>=)\\s{0,2}((+]\\s{0,2})?(\\d+\\s{0,2}[/]\\s{0,2}(\\d{2,}|[1-9])\\s{0,2}\\d+|\\d+[.]\\d{1,2}|\\d+))\\s{0,2}";
Pattern ptrn = Pattern.compile(pattern);
Matcher match = ptrn.matcher(inequation);
if(match.find()){
String fraction = match.group(2);
System.out.println(fraction);
} else {
System.out.println("NO MATCH");
}

但是它没有按预期工作。 如果分母上至少有两位数字,它将正确返回(例如40/32)。 但是,如果只有1位数字,则仅返回整数部分(例如40)。

无论如何要解决这个问题? 我应该使用哪种表达方式?

您可以尝试使用debuggex构建正则表达式。 它显示了一个漂亮的表达式图表,您也可以测试输入。

Java实现 (验证分子非零。):

    Matcher m  = Pattern.compile("[<>]=?\\s{0,2}([0-9]*(/[1-9][0-9]*)?)$").matcher("4x1 + 6x2 <= 40/3");
    if (m.find()) {
        System.out.println(m.group(1));
    }

表达式的末尾需要一个“ $”,以便它尝试匹配整个不等式。

您是否只需要不等号后的数字? 然后做:

Matcher m  = Pattern.compile("[<>]=?\\s*(.+?)\\s*$").matcher(string);
String number = m.find() ? m.group(1) : null;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM