本文介绍在 selenium 自动化测试中,如何从带格式的文本(如 "$1,299.99")中精准提取纯数字,并转换为数值类型用于后续计算或比价。
本文介绍在 selenium 自动化测试中,如何从带格式的文本(如 "$1,299.99")中精准提取纯数字,并转换为数值类型用于后续计算或比价。
在使用 Selenium 抓取网页价格(例如 <p class="box-price-present">$1,299.99</p>)时,WebElement.getText() 返回的是原始 DOM 文本——包含货币符号、逗号、小数点甚至空格等非纯数字字符。若需将其用于数值比较、存储或计算,必须先清洗并转换为标准数字类型(如 double 或 int)。
推荐采用正则表达式进行健壮清洗。以下是一个通用且可扩展的工具方法:
public static String extractDigitsAndDot(String input) { if (input == null || input.trim().isEmpty()) { return "0"; } // 保留数字、小数点(.),移除所有其他字符(含 $、,、空格、¥、€ 等) return input.replaceAll("[^d.]", "");}
⚠️ 注意:该正则 [^d.] 表示“匹配所有非数字且非小数点的字符”,比 [^d.] 更简洁安全(Java 中 d 已涵盖 Unicode 数字,. 在字符类中无需转义)。若需支持千分位逗号后的小数点(如 "1,299.99" → "1299.99"),此逻辑已天然兼容——因为逗号被清除,仅保留数字和小数点。
接着可安全转换为数值类型:
String rawPrice = price.getText(); // e.g., "$1,299.99"String cleanPriceStr = extractDigitsAndDot(rawPrice); // → "1299.99"// 转 double(推荐:保留小数精度,适合价格计算)double numericPrice = Double.parseDouble(cleanPriceStr);// 或转整数(仅当明确需去小数,如单位为“分”时可乘100后转 long)long cents = Math.round(numericPrice * 100); // 避免浮点误差,用于精确金额处理System.out.println("Raw: " + rawPrice);System.out.println("Clean: " + cleanPriceStr);System.out.println("As double: " + numericPrice);System.out.println("Cents: " + cents);
✅ 最佳实践建议:
通过以上方法,你即可将任意格式化价格文本("$1,299.99"、"¥2,580"、"€99.95")稳定、高效地转化为可运算的纯数字,无缝接入比价系统或数据分析流程。