当字符串中只有一个数字发生变化时,需要正则表达式的帮

时间:2011-07-21 13:24:04

标签: java regex

如果某些字符串与

匹配,如何使用正则表达式检入Java
Monday ptnumber Operating Mode

其中数字(在pt之后)具有类似0,1,... 99,...的具体值 - 任何整数? 星期一和操作模式是硬编码的,只是数字可以在字符串中更改。

6 个答案:

答案 0 :(得分:1)

boolean matches = input.matches("Monday pt[0-9]+ Operating Mode");

答案 1 :(得分:1)

@Mark Peters& @Joachim Sauer给出了很好的答案。但我想补充简短的评论。

使用\ d代替[0-9]和\ s +而不是空格,即"Monday\\s+\\d+\\s+Operating Mode"。现在正则表达式不那么严格:它允许空格数量。对我来说\ d比[0-9]

更具可读性
  1. 方法matches自动在开头添加^,在正则表达式结尾添加$。请改用Matchermfind()

  2. 模式编译是一个非常耗费CPU的过程。最好在应用程序初始化期间对所有静态模式使用Pattern.compile(),然后使用ready模式。 String.mantches()实际上创建了模式,然后运行它。

  3. private static Pattern p = Pattern.compile("Monday\\s+\\d+\\s+Operating Mode");

    // now use it:

    p.matcher(str).find();

答案 2 :(得分:0)

String input = "Monday 24 Operating Mode";
if ( input.matches ( "Monday [0-9]+ Operating Mode" ) ) {
    //...it matches...
}

答案 3 :(得分:0)

input.matches("Monday \\d{0,2} Operating Mode");

怎么样?

答案 4 :(得分:0)

这也将提取数字。

String input ="Monday pt23 Operating Mode";
Pattern p = Pattern.compile("Monday pt([0-9]+) Operating Mode");
Matcher m = p.matcher(input);
boolean found = m.find();
if (found) {
    String number = m.group(1);
    System.out.println(number);
}

答案 5 :(得分:0)

input.matches("Monday pt(\\d+) Operating Mode");