Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在正则表达式中无法正确识别带正斜杠(/)的模式_Java_Regex - Fatal编程技术网

Java 在正则表达式中无法正确识别带正斜杠(/)的模式

Java 在正则表达式中无法正确识别带正斜杠(/)的模式,java,regex,Java,Regex,我有一些带有glucose信息的字符串及其相应的值。例如,一个示例字符串是“FINGER血糖156 2小时PP”,我有以下Java程序 public class GlucosePattern{ // test string private static String case1 = "FINGER BLOOD GLUCOSE 156 two hours PP"; private static final String decimalValue = "(\\d+

我有一些带有
glucose
信息的字符串及其相应的值。例如,一个示例字符串是“FINGER血糖156 2小时PP”,我有以下Java程序

public class GlucosePattern{


    // test string  
    private static String case1 = "FINGER BLOOD GLUCOSE 156 two hours PP";

    private static  final String decimalValue = "(\\d+(\\.|,)\\d+)|(\\s\\d+(\\s|$))";
    private static final String glucose =  "Glucose.*?";
    private static final Pattern COMPILED_PATTERN = Pattern.compile(glucose+ decimalValue,
            Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE );


   public Matcher find(final String text) {

       return pattern.matcher(text);
   }

}



// the test of the program 
@Test
public void findWithCase1ShouldFindPattern() throws Exception {

    assertTrue(new GlucosePattern().find(case1).find());
}
提供的测试返回了
true
,但当我使用其他字符串时,比如说,
“实验室显示阴离子间隙正常,葡萄糖278,u/a w/1+酮。”
测试失败。我相信这是因为正斜杠“/”的事实


如何改进正则表达式以正常工作

您的正则表达式正在寻找一个数字,然后是一个空格,或者是一个数字,然后是一个点或逗号,后跟另一个数字。如果不匹配,则是因为数字后面没有空格,逗号后面也没有数字


如果你想让它匹配,你需要更新你的正则表达式,使之像
“(\\d+(\\.\124;,)\\ d*)(\\s\\d+(\\s |$)”

我绝对同意@user4504267和@Wernsey的答案,因为278后面的逗号导致
或运算符的第二部分不匹配。但是你也应该仔细检查你是否想让葡萄糖成为比赛的一部分。正如你所看到的,
Glucose.*(\d+(\.\124;,)\ d+)(\s\d+(\s |$)
的正则表达式匹配
Labs中的
Glucose 278
显示了正常的阴离子间隙,葡萄糖278u/a w/1+酮。
但它也只匹配
Labs中的278,显示了正常的阴离子间隙,278u/a w/1+酮。

这是因为
|
之前的第一个选项匹配“然后是一组带有单句点或逗号的数字”,第二个部分匹配“一个空格后跟一组数字,后跟一个空格或行尾”。我怀疑你总是想在匹配数值之前先匹配葡萄糖


我建议在一个类似java的站点上迭代和测试您的正则表达式,以及编写java单元测试。您应该能够找出如何调整正则表达式,以匹配并准确捕获这样一个站点所需的内容。

导致问题的是278后面的逗号。正则表达式的这部分要求逗号后面至少有一个数字,而正则表达式的另一部分要求数字后面有空格。是的,这已经解决了,我接受它作为一个答案。没错,我想先匹配“glucose”,如果不是这样的话,我将寻找第二部分。在这种情况下,如何改进正则表达式?顺便说一句,这里指出这一点很有帮助。