我试图使用正则表达式提取文本,但它无法正常工作

时间:2014-06-17 07:11:08

标签: java regex

我正在尝试使用正则表达式提取文本,但它无效。虽然我的正则表达式在正则表达式验证器上工作正常。

public class HelloWorld {

    public static void main(String []args){

        String PATTERN1 = "F\\{([\\w\\s&]*)\\}";
        String PATTERN2 = "{([\\w\\s&]*)\\}";

        String src = "F{403}#{Title1}";
        List<String> fvalues = Arrays.asList(src.split("#"));

        System.out.println(fieldExtract(fvalues.get(0), PATTERN1));
        System.out.println(fieldExtract(fvalues.get(1), PATTERN2));
   }

   private static String fieldExtract(String src, String ptrn) {
      System.out.println(src);
      System.out.println(ptrn);
      Pattern pattern = Pattern.compile(ptrn);
      Matcher matcher = pattern.matcher(src);
      return matcher.group(1);
   }
}

2 个答案:

答案 0 :(得分:0)

为什么不使用:

Pattern regex = Pattern.compile("F\\{([\\d\\s&]*)\\}#\\{([\\s\\w&]*)\\}");

同时获得两者?

这样,该号码将在群组1中,而群组中的标题将为2

另一件事如果你要编译正则表达式(这对性能有帮助)至少使正则表达式对象保持静态,这样每次调用函数时它都不会被编译(哪种错过了整个函数)预编译点:))

基本演示here

答案 1 :(得分:0)

第一个问题:

String PATTERN2 = "\\{([\\w\\s&]*)\\}"; // quote '{'

第二个问题:

  Matcher matcher = pattern.matcher(src);
  if( matcher.matches() ){
      return matcher.group(1);  
  } else ...

必须要求匹配者耕田,否则你无法收获结果。