我有一个string
如下:
dfdfm;lg 2500$ jshfsnefsfz5405€mnvkjdf64rfmkd554668¢ odsfrknegj 885486¥ dsflkef 588525dollar
我正在使用此[\\d,]+\\s*\\$|[\\d,]+\\s*€|[\\d,]+\\s*¥|[\\d,]+\\s*¢|[\\d,]+\\s*dollar
:
2500 $ 5405€ 554668¢ 885486¥ 588525dollar
问题:但我不需要这些$ € ¢ ¥ dollar
。如何在顶级正则表达式中删除这些?
这是我的方法:
private String getPrice(String caption) {
String pricePattern = "[\\d,]+\\s*\\$|[\\d,]+\\s*€|[\\d,]+\\s*¥|[\\d,]+\\s*¢|[\\d,]+\\s*dollar|[\\d,]+\\s*Euro";
List<String> lstPrice = new ArrayList<>();
Pattern rPrice = Pattern.compile(pricePattern);
Matcher mPrice = rPrice.matcher(caption);
while (mPrice.find()) {
lstPrice.add(mPrice.group());
}
if (lstPrice.size() > 0) {
return lstPrice.get(0);
}
return "";
}
答案 0 :(得分:0)
您可以尝试使用 replaceAll
替换匹配的输入序列的每个子序列 具有给定替换字符串的模式。
String pricePattern="2500$ 5405€ 554668¢ 885486¥ 588525dollar";
pricePattern= pricePattern.replaceAll("[^\\d+]", " "); //2500 5405 554668 885486 588525
检查 Java Demo
答案 1 :(得分:0)
如果您需要返回所有价格,请确保getPrice
方法返回List<String>
并调整正则表达式以匹配价格但仅捕获数字:
private List<String> getPrice(String caption) {
String pricePattern = "(?i)(\\d[\\d,]*)\\s*(?:[$€¥¢]|dollar|Euro)";
List<String> lstPrice = new ArrayList<>();
Pattern rPrice = Pattern.compile(pricePattern);
Matcher mPrice = rPrice.matcher(caption);
while (mPrice.find()) {
lstPrice.add(mPrice.group(1));
}
return lstPrice;
}
请参阅Java demo online。
String s = "dfdfm;lg 2500$ jshfsnefsfz5405€mnvkjdf64rfmkd554668¢ odsfrknegj 885486¥ dsflkef 588525dollar";
System.out.println(getPrice(s));
返回
[2500, 5405, 554668, 885486, 588525]
模式详情:
(?i)
- 不区分大小写的修饰符(嵌入标记选项)(\\d[\\d,]*)
- 第1组捕获数字,然后是0+数字或,
\\s*
- 0+ whitespaces (?:[$€¥¢]|dollar|Euro)
- $
,€
,¥
,¢
,dollar
或euro
(不区分大小写的搜索是通过(?i)
)