2015-08-13 5 views
-1

Я хочу, чтобы разобрать вход с условием:Java: извлечение строки из ввода, используя регулярное выражение

  • найти <AD(1 to n)> и
  • получить строку в <AD> to </AD>

Ниже мой код и ввода текста , Но я не ожидаю выхода. выход я получаю, как показано ниже,

[T, > Primary , ddress , /, T, >, > Primary , ddress Line , ~Primary , ddress Line , ~Primary , ddress Line , ~Primary , ddress Line , ~City~State~Zip Code~Country, /, >; , T, > Office , ddress , /, T, >, > Primary , ddress Line , ~Primary , ddress Line , ~Primary , ddress Line , ~Primary , ddress Line , ~City~State~Zip Code~Country, /, >; , T, > Home , ddress , /, T, >, > Primary , ddress Line , ~Primary , ddress Line , ~Primary , ddress Line , ~Primary , ddress Line , ~City~State~Zip Code~Country, /, >]

public class TestProject { 

    public static void main(String[] args) { 
     String address ="<AT1> Primary Address </AT1><AD1> Primary Address Line 1 ~Primary Address Line 2 ~Primary Address Line 3~Primary Address Line 4~City~State~Zip Code~Country</AD1>;\n" 
       + "<AT2> Office Address </AT2><AD2> Primary Address Line 1 ~Primary Address Line 2 ~Primary Address Line 3~Primary Address Line 4~City~State~Zip Code~Country</AD2>;\n" 
       + "<AT3> Home Address </AT3><AD2> Primary Address Line 1 ~Primary Address Line 2 ~Primary Address Line 3~Primary Address Line 4~City~State~Zip Code~Country</AD2>"; 

     System.out.println(captureValues(address)); 
    } 

    public static Pattern ptn = Pattern.compile("[^<AD0-9]+"); 

    public static List<String> captureValues(String address) 
    { 
     Matcher mtch = ptn.matcher(address); 
     List<String> ips = new ArrayList<String>(); 
     while(mtch.find()) 
     { 
      ips.add(mtch.group()); 
     } 
     return ips; 
    } 
} 

ответ

1

Regex может быть не самый лучший инструмент для этого, но с заданной входной попытки:

Pattern ptn = Pattern.compile("(?<=<AD(\\d)>).+?(?=</AD\\d>)"); 

, что означает:

  • (?<=<AD(\\d)>) - положительный loohbehind для <AD(digit)>,
  • .+? - один или более любых символов, но ленивого квантора, поэтому он будет соответствовать минимальным quantitiy символов, чтобы сделать весь регулярное выражение, чтобы соответствовать,
  • (?=</AD\\d>) - положительный предпросмотр для </AD(digit)>

в первая цифра находится в группе захвата (\\d), поэтому вы все равно можете получить ее по методу mtch.group(1). Если вам это не нужно, вы можете удалить круглые скобки.

Ваше регулярное выражение [^<AD0-9]+ означает один или более любых символов, но не: цифры (0-9), <, A или D, поэтому вы получите неверный вывод, что сократить ввод в любом месте, где регулярное выражение не совпадает.

+0

Спасибо ........... – user2488578

Смежные вопросы