Получение текста, следующего после совпадения регулярных выражений
Я новичок в использовании регулярных выражений, я прошел через грабли учебников, но я не нашел тот, который относится к тому, что я хочу сделать,
Я хочу что-то искать, но возвращаю все, что следует за ним, но не саму строку поиска
например,"какое-то хромое предложение, которое является удивительным"
поиск "наказание"
возвращения "это потрясающе"
любая помощь будет высоко оценил
Это мое регулярное выражение до сих пор
sentence(.*)
но он возвращает: предложение это круто
Pattern pattern = Pattern.compile("sentence(.*)");
Matcher matcher = pattern.matcher("some lame sentence that is awesome");
boolean found = false;
while (matcher.find())
{
System.out.println("I found the text: " + matcher.group().toString());
found = true;
}
if (!found)
{
System.out.println("I didn't find the text");
}
5 ответов:
вы можете сделать это с "просто регулярное выражение", как вы просили в комментарии:
(?<=sentence).*
(?<=sentence)
это положительное утверждение lookbehind. Это соответствует определенной позиции в строке, а именно в позиции сразу после текстаsentence
не делая сам этот текст частью матча. Следовательно,(?<=sentence).*
будет соответствовать любой текст послеsentence
.это довольно хорошая особенность регулярных выражений. Однако, в Java это будет работать только для подвыражения конечной длины, т. е.
(?<=sentence|word|(foo){1,4})
является законным, но(?<=sentence\s*)
нет.
регулярное выражение
"sentence(.*)"
прав. Чтобы получить содержимое группы в скобках, необходимо вызвать:Pattern p = Pattern.compile( "sentence(.*)" ); Matcher m = p.matcher( "some lame sentence that is awesome" ); if ( m.find() ) { String s = m.group(1); // " that is awesome" }
обратите внимание на использование
m.find()
в этом случае (попытки найти в любом месте строки) и неm.matches()
(не удалось бы из-за префикса "какой-то хромой"; в этом случае регулярное выражение должно быть".*sentence(.*)"
)
Если Matcher инициализируется с
str
, после матча, вы можете получить часть после матча сstr.substring(matcher.end())
Пример Кода:
final String str = "Some lame sentence that is awesome"; final Matcher matcher = Pattern.compile("sentence").matcher(str); if(matcher.find()){ System.out.println(str.substring(matcher.end()).trim()); }
выход:
Это потрясающе