This commit is contained in:
雷欧(林平凡)
2025-08-08 14:46:59 +08:00
parent 2f0157e03e
commit 0ba97c39a2

View File

@@ -2791,49 +2791,29 @@ public class JDUtil {
* @return 解析出的价格失败返回null * @return 解析出的价格失败返回null
*/ */
public static Double parsePrice(String input) { public static Double parsePrice(String input) {
logger.info("parsePrice传入input{}", input); if (Util.isEmpty(input)) {
if (input == null || input.isEmpty()) {
return null; return null;
} }
// 更健壮的正则表达式,可以处理各种空白字符和中间的其他字符 // 第一次尝试匹配包含“◉”或“🔥”字符的价格
// 使用[\s\S]*?非贪婪匹配可能存在于价格前的任何字符 Pattern pattern = Pattern.compile("(\\uD83D\\uDECD|\\u25C9)[\\s\\S]*?([\\d.]+)\\s*\\uD83D\\uDCB0?");
Pattern pattern = Pattern.compile("\\u25C9[\\s\\S]*?([\\d.]+)\\s*\\uD83D\\uDCB0?");
Matcher matcher = pattern.matcher(input); Matcher matcher = pattern.matcher(input);
if (matcher.find()) { if (matcher.find()) {
logger.info("parsePrice第一次正则匹配到的价格{}", matcher.group(1)); logger.info("parsePrice第一次正则匹配到的价格{}", matcher.group(2));
try { return Double.parseDouble(matcher.group(2));
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.]+)"); Pattern fallbackPattern = Pattern.compile("(\\uD83D\\uDECD|\\u25C9)[\\s\\S]*?([\\d.]+)");
Matcher fallbackMatcher = fallbackPattern.matcher(input); Matcher fallbackMatcher = fallbackPattern.matcher(input);
if (fallbackMatcher.find()) { if (fallbackMatcher.find()) {
logger.info("parsePrice第二次正则匹配到的价格{}", fallbackMatcher.group(1)); logger.info("parsePrice备用正则匹配到的价格{}", fallbackMatcher.group(2));
try { return Double.parseDouble(fallbackMatcher.group(2));
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没有匹配到价格"); logger.info("parsePrice没有匹配到价格");
}
return null; return null;
} }
} }