我试图匹配冒号后的温度范围:
package jfd;
public class BoyGirlCounter {
public static void main(String[] args) {
countBoyGirlInts("JP 3 Helene 7 Jordan 14 Iva 13 Sergey 4 Marianne 9 Kenneth 6");
}
public static void countBoyGirlInts(String boysgirls) {
String[] words = boysgirls.split(" ");
int boypos = 1;
int boycount = 0;
int boysum = 0;
int girlpos = 3;
int girlcount = 0;
int girlsum = 0;
for (int i = 0; i < words.length; i++) {
if (i == boypos) {
boycount++;
boysum += Integer.valueOf(words[i]).intValue();
boypos += 4;
}
if (i == girlpos) {
girlcount++;
girlsum += Integer.valueOf(words[i]).intValue();
girlpos += 4;
}
}
System.out.println(boycount + " boys, " + girlcount + " girls");
System.out.println("Boys sum = " + boysum);
System.out.println("Girls sum = " + girlsum);
}
}
所以,这个值的格式是这个字符串总是在冒号之后,以数字开头,以右括号结束&#34;)&#34;。有没有办法让我在正则表达式中匹配这个?
我试过这个,但它不起作用:
Temperature Range: 44 F to 64 F / 7 C to 18 C (upper) and 51 F to 64 F / 11 C to 18 C (lower)
所以它从\ d开头并以...结束。
我可能知道出了什么问题吗?
P.S。,我不是用任何编程语言编写Regex。我只是在网络抓取工具中编写正则表达式。
谢谢!
答案 0 :(得分:0)
以下是适用于您的更新正则表达式:
Temperature Range:\s*(\d+.*\))$
^ ^
请参阅regex demo
^
是正则表达式中的字符串起始锚点,它会导致正则表达式使输入字符串的匹配失败。此外,由于可选空格(\s*
)后必须有数字,因此建议将+
( 1次或更多次出现)量词应用于\d
。
如果您的字符串可能以任何内容开头,而不仅仅是&#34;温度范围&#34;,您可以使用延迟点匹配.*?
替换它:
^.*?:\s*(\d+.*\))$
^^^
请参阅another demo