从response 中得到 Family Name 的信息,原文如下:
Retrieve Family Name from response
Search for the keyword “FAMILY NAME”, followed by spaces.
Extract the string that follows until the occurrence of the character “.”.  In this example, the Family name is “WONG”example:
SETA Approval  2010-05-30
FAMILY NAME     WONG...........................USA COUNTRY
GIVEN NAME    PERTER..................
PASSPORT      CN11111........... CHN           EXPIRY DATE 08JUN2015sample里面包含了换行信息。
请问大家能否用正则表达式来取得 FAMILY NAME 的信息?

解决方案 »

  1.   

    try... String test = "xample:" 
     + "SETA Approval 2010-05-30"
     + "FAMILY NAME WONG...........................USA COUNTRY"
     + "GIVEN NAME PERTER.................."
     + "PASSPORT CN11111........... CHN EXPIRY DATE 08JUN2015";
    String pattern = "(?i)FAMILY\\s+NAME\\s+([^.]+)";
    Matcher m = Pattern.compile(pattern).matcher(test);
    while(m.find())
    {
    System.out.println(m.group(1));
    }
      

  2.   

    String test = "xample:\n" 
             + "SETA Approval 2010-05-30\n"
             + "FAMILY NAME WONG...........................USA COUNTRY\n"
             + "GIVEN NAME PERTER..................\n"
             + "PASSPORT CN11111........... CHN EXPIRY DATE 08JUN2015\n";
    //System.out.print(test);
    Pattern p = Pattern.compile(".*FAMILY NAME (.*)");
    Matcher m = p.matcher(test);
    while(m.find()){
    System.out.println(m.group(1));
    }
      

  3.   

    文件名 TestRegex.txt:
    SETA Approval 2010-05-30
    FAMILY NAME WONG...........................USA COUNTRY
    GIVEN NAME PERTER..................
    PASSPORT CN11111........... CHN EXPIRY DATE 08JUN2015
    try{
    BufferedReader buff = new BufferedReader(
    new FileReader("TestRegex.txt"));
    String s = null;
    String result = null;
    while((s = buff.readLine()) != null){
    if(Pattern.matches("FAMILY NAME .*",s)){
    result = s.replaceAll("FAMILY NAME (.*)","$1");
    }
    }
    System.out.println(result);
    }catch(Exception e){
    e.printStackTrace();
    }
      

  4.   


    String test = "xample:\n"  
      + "SETA Approval 2010-05-30\n"
      + "FAMILY NAME WONG...........................USA COUNTRY\n"
      + "GIVEN NAME PERTER..................\n"
      + "PASSPORT CN11111........... CHN EXPIRY DATE 08JUN2015\n";
    //System.out.print(test);
    Pattern p = Pattern.compile(".*FAMILY NAME (.*)");
    Matcher m = p.matcher(test);
    while(m.find()){
    System.out.println(m.group(1));
    }
      

  5.   


    的到的结果是 WONG...........................USA COUNTRY
    而不是 WONG
      

  6.   

    Pattern p = Pattern.compile(".*FAMILY NAME (.*)");
    Matcher m = p.matcher(test);
    while(m.find()){
    System.out.println(m.group(1));
    }
    得到的结果是 WONG...........................USA COUNTRY
    而不是 WONG
      

  7.   

    是我理解错了。。我还以为你就是要得到family name 后面的所有字符呢。
    if(Pattern.matches("FAMILY NAME .*",s)){
    result = s.replaceAll("FAMILY NAME (\\w+).+","$1");
    }只要改一句就行啦,\\w表示的意思是字母。
    就算你句子是:FAMILY NAME WONG ABC...................USA COUNTRYWONG后面是 空格或是........都可以得到WONG