首页 > 解决方案 > Java Regex - 在字符串中查找数值

问题描述

在下面的两个字符串(天气)中,我需要使用正则表达式找到第一个"xxxFT"值,"BKN"然后只提取数值:xxxx

2400在第一个字符串中,最终值将700在第二个中。

之间可能是一个附加词,这取决于"BKN""xxxxFT"即:"BKN CB 2400FT""BKN 700FT"

String str1 = "4000M WX MODTSRA CLD FEW 600FT BKN CB 2400FT BKN CB 2900FT T 21 DP 18 QNH 1010.7HPA MET QFE 1004.1HPA TREND TEMPO MOD TSRA"

String str2 = "1500M CLD BKN 700FT BKN 4600FT T 16 DP 17 QNH 1014.7HPA MET QFE 1004.1HPA TREND TEMPO MOD TSRA"

我可以为此使用哪种正则表达式模式?

标签: javaregexmatcher

解决方案


更新: 如果您想使用单个正则表达式,请使用以下代码:

Pattern pattern = Pattern.compile("BKN.*?\\s+(\\d+)FT");
Matcher matcher = pattern.matcher(String1);
if (matcher.find()) {
        System.out.println(matcher.group(1));
}

的首先你需要从 BKN 开始获取 SubString 所以

int startIndex = String1.indexOf("BKN");
String str = String1.subString(startIndex);

然后你需要在 BKN 和 FT 之间减少它,这样才能得到 FT 的索引

startIndex = 0;
int endIndex = str.indexOf("FT")+1;
str = str.subString(startIndex,endIndex);

最后你可以使用这个正则表达式并从字符串中删除非数字字符

str = str.replaceAll("\\D+",""); 

String1 的输出:2400 String2 的输出:700


推荐阅读