2015-09-28 6 views
3

У меня есть следующий код для извлечения строки в двойных кавычках с использованием Regex.Извлечение строки с использованием Regex

String str ="\"Java\",\"programming\""; 
final Pattern pattern = Pattern.compile("\"([^\"]*)\""); 
final Matcher matcher = pattern.matcher(str); 
while(matcher.find()){ 
    System.out.println(matcher.group(1)); 
} 

Выход я получаю сейчас Java программирование .Но из струнного ул Я хочу содержание во втором двойных кавычках, который является программирование. Может ли кто-нибудь сказать мне, как это сделать с помощью Regex.

ответ

2

Если вы хотите последнюю фишку в двойных кавычках, добавить конец-строки archor ($):

final Pattern pattern = Pattern.compile("\"([^\"]*)\"$"); 

В этом случае, вы можете заменить while с if, если ваш вход в одну строку ,

+0

Благодарю. Предложение Ur помогло решить мою проблему. – bharani

4

Если взять пример, и изменить его немного:

String str ="\"Java\",\"programming\""; 
final Pattern pattern = Pattern.compile("\"([^\"]*)\""); 
final Matcher matcher = pattern.matcher(str); 
int i = 0 
while(matcher.find()){ 
    System.out.println("match " + ++i + ": " + matcher.group(1) + "\n"); 
} 

Вы должны найти, что он печатает:

match 1: Java 
match 2: programming 

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

  • Сохраните матч в цикле, и когда цикл закончен, вы получите последнее совпадение.
  • Изменить регулярное выражение, чтобы игнорировать все, пока ваш шаблон, с чем-то вроде: Pattern.compile(".*\"([^\"]*)\"")

Если вы действительно хотите явно второй матч, то самым простым решением является чем-то вроде Pattern.compile("\"([^\"]*)\"[^\"]*\"([^\"]*)\""). Это дает две сопоставимые группы.

1

Отличный ответ от Пола.Ну, Вы также можете попробовать эту модель программы

final Pattern pattern = Pattern.compile(",\"(\\w+)\""); 

Java

 String str ="\"Java\",\"programming\""; 
final Pattern pattern = Pattern.compile(",\"(\\w+)\""); 
final Matcher matcher = pattern.matcher(str); 
while(matcher.find()){ 
    System.out.println(matcher.group(1)); 
} 

Объяснение

,\": соответствует запятая, а затем кавычками "

(\\w+): соответствует одному или более слов

\": совпадает с последним кавычку "

Тогда группа (\\w+) захватывается (группа 1 раз)

Выходной

programming 
+0

Что делать, если я хочу распечатать ** Java ** и ** Программирование ** отдельно, используя 2 разных оператора печати. Как я могу это сделать? – bharani

+0

затем используйте этот шаблон 'final Pattern pattern = Pattern.compile (" ([^ \ ",] +)"); ' –

+0

Я хочу отделить ** java ** и ** программирование ** на две разные строки и распечатать – bharani