2016-04-08 2 views
0

Я использую Java Regex для чтения строки типаПравильного регулярное выражение

"{\n 'Step 1.supply.vendor1.quantity':\"80"\,\n 
     'Step 2.supply.vendor2.quantity':\"120"\,\n 
     'Step 3.supply.vendor3.quantity':\"480"\,\n 
     'Step 4.supply.vendor4.quantity':\"60"\,\n}" 

Я должен обнаружить строки типа

'Step 2.supply.vendor2.quantity':\"120"\,\n. 

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

<Beginning of Line><whitespace><whitespace><'Step><whitespace><Number><.><Any number & any type of characters><,\n><EOL>. 

<Beginning of Line> и <EOL> Я использовал для уточнения цели.

Я попытался несколько моделей

String regex = "(\\n\\s{2})'Step\\s\\d.*,\n"; 
String regex = "\\s\\s'Step\\s\\d.*,\n"; 

Я всегда получаю IllegalStateException: не найдено.

Я не могу найти подходящий материал для чтения в Java Regex с хорошими примерами. Любая помощь будет действительно велика. Благодарю.

+2

Это выглядит как формат JSON, вы уверены, не хотите использовать библиотеку разбора JSON? –

+0

Это JSON, вы должны использовать парсер JSON ... –

+0

@JoseCifuentes Да, это формат JSON. Я конвертирую его в JSONObject после прочтения этих данных из файла. И затем извлечение значения для определенного ключа. Но для получения значения для ключа мне нужно, чтобы мои данные JSON выглядели следующим образом: «Шаг 2.supply.vendor2.quantity»: «120», «Шаг 3.supply.vendor3.quantity»: «480», т. Е. без символов \ n и \. – user3263235

ответ

0

Как сказано в комментариях, вы должны действительно использовать JSON Parser.

Но если вы хотите увидеть, как она могла бы работать с регулярным выражением, вот как вы можете это сделать:

  • Возьмем пример линии, которую вы хотите, чтобы захватить: Step 1.supply.vendor1.quantity':"80"
  • Заменить цифры с \\d* (\\d соответствует любой цифре)
  • Replace точек с \\. (точки должны быть экранированы)
  • Добавьте скобку вокруг частей, которые вы хотите, чтобы захватить

Вот результирующее регулярное выражение: "Step (\\d*)\\.supply\\.vendor(\\d*)\\.quantity':\"(\\d*)\""

Теперь, используйте Regex и Matcher:

String input = "{\n 'Step 1.supply.vendor1.quantity':\"80\"\\,\n"; 
Pattern pattern = Pattern.compile("Step (\\d*)\\.supply\\.vendor(\\d*)\\.quantity':\"(\\d*)\""); 
Matcher matcher = pattern.matcher(input); 
while(matcher.find()) { 
    System.out.println(matcher.group(1)); 
    System.out.println(matcher.group(2)); 
    System.out.println(matcher.group(3)); 
} 

Выход:

1 //(corresponds to "Step (\\d*)") 
1 //(corresponds to "vendor(\\d*)") 
80 //(corresponds to "quantity':\"(\\d*)") 
+0

Какой API я могу использовать в библиотеке JSON Parser для функции соответствия регулярных выражений? – user3263235

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