Bladeren bron

代码优化

zhoutg 4 jaren geleden
bovenliggende
commit
b5dd97f2e1
2 gewijzigde bestanden met toevoegingen van 108 en 36 verwijderingen
  1. 3 29
      src/main/java/com/diagbot/rule/CommonRule.java
  2. 105 7
      src/main/java/com/diagbot/util/RegexUtil.java

+ 3 - 29
src/main/java/com/diagbot/rule/CommonRule.java

@@ -1,6 +1,5 @@
 package com.diagbot.rule;
 
-import com.diagbot.biz.push.entity.Item;
 import com.diagbot.biz.push.entity.Pacs;
 import com.diagbot.dto.BillMsg;
 import com.diagbot.dto.RuleBaseDTO;
@@ -14,6 +13,7 @@ import com.diagbot.util.CoreUtil;
 import com.diagbot.util.EntityUtil;
 import com.diagbot.util.ListUtil;
 import com.diagbot.util.MsgUtil;
+import com.diagbot.util.RegexUtil;
 import com.diagbot.util.StringUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Component;
@@ -28,8 +28,6 @@ import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.atomic.AtomicReference;
 import java.util.concurrent.locks.ReentrantLock;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
 
 /**
  * @description: 通用规则提取
@@ -224,7 +222,7 @@ public class CommonRule {
             Pacs pacs = pacsList.get(pacsList.size() - 1); // 按时间排序,取最后一条
             String result = pacs.getResult();
             if (StringUtil.isNotBlank(result) && StringUtil.isNotBlank(ruleBaseDTO.getBaseEqValue())
-                    && getRegexRes(result, ruleBaseDTO.getBaseEqValue())) {
+                    && RegexUtil.getRegexRes(result, ruleBaseDTO.getBaseEqValue())) {
                 String dateValue = pacs.getDateValue(); // 结果日期
                 String orderDateValue = ruleSimpleDTO.getDateValue(); // 开单项日期
                 if (StringUtil.isNotBlank(dateValue) && StringUtil.isNotBlank(orderDateValue)) {
@@ -252,36 +250,12 @@ public class CommonRule {
      */
     public void getRegexResPush(String content, String regex, List<Long> baseIdList, String ids) {
         // 是否有符合的数据
-        boolean flag = getRegexRes(content, regex);
+        boolean flag = RegexUtil.getRegexRes(content, regex);
         if (flag) {
             CoreUtil.addSplitString(baseIdList, ids);
         }
     }
 
-    /**
-     * 是否有符合的数据(公共方法)
-     *
-     * @param content 文本内容
-     * @param regex   表达式
-     * @return
-     */
-    public Boolean getRegexRes(String content, String regex) {
-        // 是否有符合的数据
-        try {
-            if (StringUtil.isBlank(content) || StringUtil.isBlank(regex)) {
-                return false;
-            }
-            Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
-            Matcher matcher = pattern.matcher(content);
-            if (matcher.find()) {
-                return true;
-            }
-        } catch (Exception e) {
-            return false;
-        }
-        return false;
-    }
-
     /**
      * 根据指定字段按照字符串排序
      *

+ 105 - 7
src/main/java/com/diagbot/util/RegexUtil.java

@@ -25,19 +25,45 @@ public class RegexUtil {
     }
 
     /**
-     * 是否有符合的数据(公共方法)
+     * 是否有符合正则的数据(大小写不敏感)
      *
      * @param content 文本内容
      * @param regex   表达式
      * @return
      */
     public static Boolean getRegexRes(String content, String regex) {
+        return getRegexResCommon(content, regex, false);
+    }
+
+    /**
+     * 是否有符合正则的数据(大小写敏感)
+     *
+     * @param content 文本内容
+     * @param regex   表达式
+     * @param senstive 大小写是否敏感
+     * @return
+     */
+    public static Boolean getRegexRes(String content, String regex, boolean senstive) {
+        if (senstive) {
+            return getRegexResCommon(content, regex, true);
+        }
+        return getRegexResCommon(content, regex, false);
+    }
+
+    /**
+     * 是否有符合正则的数据(内部方法)
+     *
+     * @param content 文本内容
+     * @param regex   表达式
+     * @return
+     */
+    private static Boolean getRegexResCommon(String content, String regex, Boolean sensitive) {
         // 是否有符合的数据
         try {
             if (StringUtil.isBlank(content) || StringUtil.isBlank(regex)) {
                 return false;
             }
-            Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
+            Pattern pattern = getPattern(regex, sensitive);
             Matcher matcher = pattern.matcher(content);
             if (matcher.find()) {
                 return true;
@@ -49,7 +75,24 @@ public class RegexUtil {
     }
 
     /**
-     * 根据正则获取指定分组数据
+     * 获取pattern
+     *
+     * @param regex 正则表达式
+     * @param sensitive 大小写敏感
+     * @return
+     */
+    public static Pattern getPattern(String regex, Boolean sensitive) {
+        Pattern pattern = null;
+        if (sensitive) {
+            pattern = Pattern.compile(regex);
+        } else {
+            pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
+        }
+        return pattern;
+    }
+
+    /**
+     * 根据正则获取指定分组数据(大小写不敏感)
      *
      * @param content  文本内容
      * @param regex    表达式
@@ -57,12 +100,39 @@ public class RegexUtil {
      * @return
      */
     public static String getRegexData(String content, String regex, Integer groupNum) {
+        return getRegexDataCommon(content, regex, groupNum, false);
+    }
+
+    /**
+     * 根据正则获取指定分组数据(大小写敏感)
+     *
+     * @param content  文本内容
+     * @param regex    表达式
+     * @param groupNum 获取第几个内容
+     * @return
+     */
+    public static String getRegexData(String content, String regex, Integer groupNum, Boolean sensitive) {
+        if (sensitive) {
+            return getRegexDataCommon(content, regex, groupNum, true);
+        }
+        return getRegexDataCommon(content, regex, groupNum, false);
+    }
+
+    /**
+     * 根据正则获取指定分组数据(公共方法)
+     *
+     * @param content  文本内容
+     * @param regex    表达式
+     * @param groupNum 获取第几个内容
+     * @return
+     */
+    private static String getRegexDataCommon(String content, String regex, Integer groupNum, Boolean sensitive) {
         // 获取符合的数据
         try {
             if (StringUtil.isBlank(content)) {
                 return "";
             }
-            Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
+            Pattern pattern = getPattern(regex, sensitive);
             Matcher matcher = pattern.matcher(content);
             if (matcher.find() && matcher.groupCount() >= groupNum) {
                 return matcher.group(groupNum);
@@ -76,19 +146,44 @@ public class RegexUtil {
     }
 
     /**
-     * 根据正则获取指定所有分组数据
+     * 根据正则获取所有分组数据(大小写不敏感)
+     *
+     * @param content
+     * @param regex
+     * @return
+     */
+    private static List<String> getRegexData(String content, String regex) {
+        return getRegexDataCommon(content, regex, false);
+    }
+
+    /**
+     * 根据正则获取所有分组数据(大小写敏感)
      *
      * @param content
      * @param regex
      * @return
      */
-    public static List<String> getRegexData(String content, String regex) {
+    private static List<String> getRegexData(String content, String regex, Boolean sensitive) {
+        if (sensitive) {
+            getRegexDataCommon(content, regex, true);
+        }
+        return getRegexDataCommon(content, regex, false);
+    }
+
+    /**
+     * 根据正则获取所有分组数据(内部方法)
+     *
+     * @param content
+     * @param regex
+     * @return
+     */
+    private static List<String> getRegexDataCommon(String content, String regex, Boolean sensitive) {
         List<String> list = Lists.newArrayList();
         try {
             if (StringUtil.isBlank(content)) {
                 return list;
             }
-            Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
+            Pattern pattern = getPattern(regex, sensitive);
             Matcher matcher = pattern.matcher(content);
             if (matcher.find()) {
                 for (int i = 1; i <= matcher.groupCount(); i++) {
@@ -110,5 +205,8 @@ public class RegexUtil {
         String regex1 = "(血小板计数)\\s*(\\d+(\\.\\d+)?)";
         // System.out.println(getRegexData("血小板计数  30.3", regex1, 2));
         System.out.println(getRegexData("血小板计数  30.3", regex1));
+
+        String s1 = "ABC";
+        System.out.println(getRegexRes(s1, "Abc", true));
     }
 }