diff --git a/src/main/java/cn/van/business/util/JDUtil.java b/src/main/java/cn/van/business/util/JDUtil.java index 5ce7002..a48bb65 100644 --- a/src/main/java/cn/van/business/util/JDUtil.java +++ b/src/main/java/cn/van/business/util/JDUtil.java @@ -2790,50 +2790,30 @@ public class JDUtil { * @param input 包含价格的字符串 * @return 解析出的价格,失败返回null */ - public static Double parsePrice(String input) { - logger.info("parsePrice传入input{}", input); - if (input == null || input.isEmpty()) { - return null; - } - - // 更健壮的正则表达式,可以处理各种空白字符和中间的其他字符 - // 使用[\s\S]*?非贪婪匹配可能存在于价格前的任何字符 - Pattern pattern = Pattern.compile("\\u25C9[\\s\\S]*?([\\d.]+)\\s*\\uD83D\\uDCB0?"); - - Matcher matcher = pattern.matcher(input); - - if (matcher.find()) { - logger.info("parsePrice第一次正则匹配到的价格{}", matcher.group(1)); - try { - String priceStr = matcher.group(1).trim(); - if (priceStr.matches("\\d+\\.?\\d*|\\d*\\.\\d+")) { - return Double.parseDouble(priceStr); - } - } catch (NumberFormatException e) { - return null; - } - }else { - logger.info("parsePrice没有匹配到价格"); - } - - // fallback处理 - 更宽松的匹配 - Pattern fallbackPattern = Pattern.compile("\\u25C9[\\s\\S]*?([\\d.]+)"); - Matcher fallbackMatcher = fallbackPattern.matcher(input); - if (fallbackMatcher.find()) { - logger.info("parsePrice第二次正则匹配到的价格{}", fallbackMatcher.group(1)); - try { - String priceStr = fallbackMatcher.group(1).trim(); - if (priceStr.matches("\\d+\\.?\\d*|\\d*\\.\\d+")) { - return Double.parseDouble(priceStr); - } - } catch (NumberFormatException e) { - return null; - } - }else { - logger.info("parsePrice没有匹配到价格"); - } - +public static Double parsePrice(String input) { + if (Util.isEmpty(input)) { return null; } + // 第一次尝试匹配包含“◉”或“🔥”字符的价格 + Pattern pattern = Pattern.compile("(\\uD83D\\uDECD|\\u25C9)[\\s\\S]*?([\\d.]+)\\s*\\uD83D\\uDCB0?"); + Matcher matcher = pattern.matcher(input); + if (matcher.find()) { + logger.info("parsePrice第一次正则匹配到的价格{}", matcher.group(2)); + return Double.parseDouble(matcher.group(2)); + } + + // 如果第一次匹配失败,尝试备用正则表达式 + Pattern fallbackPattern = Pattern.compile("(\\uD83D\\uDECD|\\u25C9)[\\s\\S]*?([\\d.]+)"); + Matcher fallbackMatcher = fallbackPattern.matcher(input); + if (fallbackMatcher.find()) { + logger.info("parsePrice备用正则匹配到的价格{}", fallbackMatcher.group(2)); + return Double.parseDouble(fallbackMatcher.group(2)); + } + + logger.info("parsePrice没有匹配到价格"); + return null; +} + + }