2016-04-15 3 views
-1

я должен извлечь некоторые подстроки, это как XML-разметка в простом текстовом документе, какэкстракт между определенным рисунком

lsdkfjsdklfj sdklfsdklfjsd <AAA>myString</AAA>sdfsdfsdfsdf 

Может ли я извлечь эту модель в одной команде?

В таком случае я попытался использовать командную команду для извлечения этого единственного совпадения.

Я не хочу, чтобы сделать что-то вроде

String pattern = /<AAA>(.*)<\/AAA>/; 

// Create a Pattern object 
Pattern r = Pattern.compile(pattern); 

// Now create matcher object. 
Matcher m = r.matcher("lsdkfjsdklfj sdklfsdklfjsd <AAA>myString</AAA>sdfsdfsdfsdf"); 
if (m.find()) { 
    System.out.println("Found value: " + m.group(0)); 
} 

Там должно быть более элегантный способ.

Редактировать: Спасибо, time_yates, я искал что-то в этом роде.

Не могли бы вы объяснить немного, почему вы используете [0] [1] в результате

def extract = (input =~ '<AAA>(.+?)</AAA>')[0][1] 

Ответ по tim_yates:

= ~ возвращает Искателя, и так [0] Получает первое совпадение, которое представляет собой 2 группы, первая - это строка, в которой есть совпадение (вся ваша строка), вторая [1] - это группа, которую вы определили в своем выражении.

Большое вам спасибо за помощь и благодаря всем читателям. Власть сообщества !!!

+5

В чем проблема с использованием регулярного выражения и совпадения? – f1sh

+0

Как вы можете использовать js-like regex в Java? –

+0

Я просто думаю, что это немного долго :) – julienasefth

ответ

0

Разве вы не можете просто сделать:

def input = 'lsdkfjsdklfj sdklfsdklfjsd <AAA>myString</AAA>sdfsdfsdfsdf' 
def extract = (input =~ '<AAA>(.+?)</AAA>')[0][1] 
assert extract == 'myString' 
+0

Спасибо, time_yates, я искал что-то подобное. Не могли бы вы объяснить немного, почему вы используете [0] [1] в результате Защиту извлечь = (вход = ~ ' (. +?)') [0] [1] – julienasefth

+0

'= ~' возвращает Matcher, и поэтому '[0]' получает первое совпадение, которое представляет собой 2 группы, первая - это строка, в которой есть совпадение (вся ваша строка), вторая '[1]' - это группа, которую вы определили в ваше выражение –

+0

Большое вам спасибо за вашу помощь и спасибо всем читателям. Власть сообщества !!! – julienasefth

0

Это самый короткий (не самый лучший) способ, которым я могу думать без внешних LIBS:

String str = "lsdkfjsdklfj sdklfsdklfjsd <AAA>myString</AAA>sdfsdfsdfsdf"; 
System.out.println(str.substring(str.indexOf(">") + 1, str.lastIndexOf("<"))); 

Или с помощью StringUtils (что миллион в разы лучше, чем мой предыдущий взнос с подстрокой):

StringUtils.substringBetween(str, "<AAA>", "</AAA>"); 

Еще я бы пошел с matcher(), как вы предлагали среди всех этих.

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