1
This commit is contained in:
@@ -2790,50 +2790,30 @@ public class JDUtil {
|
|||||||
* @param input 包含价格的字符串
|
* @param input 包含价格的字符串
|
||||||
* @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;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 更健壮的正则表达式,可以处理各种空白字符和中间的其他字符
|
|
||||||
// 使用[\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没有匹配到价格");
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user