регулярное выражение java

#java #regex

#java #регулярное выражение

Вопрос:

Я пытаюсь перенести содержимое между входными данными, мой шаблон не работает правильно, пожалуйста, помогите.

ниже приведен sudocode:

 s="Input one Input Two Input Three";
Pattern pat = Pattern.compile("Input(.*?)");
Matcher m = pat.matcher(s);

 if m.matches():

   print m.group(..)
  

Требуемый вывод:

один

Два

Три

Комментарии:

1. Почему оно не может делать правильные вещи? Что вы получаете?

2. Будут ли части между «вводом» всегда состоять из отдельных слов?

Ответ №1:

Используйте предварительный просмотр для Input и используйте find в цикле вместо matches :

 Pattern pattern = Pattern.compile("Input(.*?)(?=Input|$)");
Matcher matcher = pattern.matcher(s);
while (matcher.find()) {
   System.out.println(matcher.group(1));
}
  

Посмотрите, как это работает онлайн: ideone

Но здесь лучше использовать split:

 String[] result = s.split("Input");
// You need to ignore the first element in result, because it is empty.
  

Посмотрите, как это работает онлайн: ideone

Комментарии:

1. Мне нравится разделенное решение, но я бы добавил пробел, чтобы оно было s.split(«Ввод»).

2. Упс. Почти. Использование s.split(» ?Ввод») также позволило бы использовать пробел после каждого слова.

Ответ №2:

это не работает, потому что m.matches имеет значение true тогда и только тогда, когда выражение соответствует всей строке. Вы могли бы пойти двумя путями:

  1. Вместо этого используйте s.split(«Ввод»), это дает вам массив подстрок между вхождениями «Ввода»
  2. Используйте Matcher.find() и Matcher.group(int). Но имейте в виду, что ваше текущее выражение будет соответствовать всему после первого появления «Ввода», поэтому вам следует изменить свое выражение.

Приветствую, Йост

Ответ №3:

 import java.util.regex.*;
public class Regex {

    public static void main(String[] args) {
        String s="Input one Input Two Input Three"; 
        Pattern pat = Pattern.compile("(Input) (\w )"); 
        Matcher m = pat.matcher(s); 

         while( m.find() ) { 
         System.out.println( m.group(2) ); 
         }
    }
}