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”,如果不是这样的话,我将寻找第二部分。在这种情况下,如何改进正则表达式?顺便说一句,这里指出这一点很有帮助。