如何使用正则表达式匹配以数字开头并以其结尾的句子

时间:2015-10-19 22:27:47

标签: regex

我试图匹配冒号后的温度范围:

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。我只是在网络抓取工具中编写正则表达式。

谢谢!

1 个答案:

答案 0 :(得分:0)

以下是适用于您的更新正则表达式:

Temperature Range:\s*(\d+.*\))$
                      ^ ^

请参阅regex demo

^是正则表达式中的字符串起始锚点,它会导致正则表达式使输入字符串的匹配失败。此外,由于可选空格(\s*)后必须有数字,因此建议将+ 1次或更多次出现)量词应用于\d

如果您的字符串可能以任何内容开头,而不仅仅是&#34;温度范围&#34;,您可以使用延迟点匹配.*?替换它:

^.*?:\s*(\d+.*\))$
 ^^^

请参阅another demo