Regex для извлечения строки между первым и последним вхождением символа - PullRequest
0 голосов
/ 17 октября 2018

В настоящее время я извлекаю определенную строку из сообщения об ошибке исключения нарушения.Я сделал следующие шаги:

Формат входной строки: Дублирующая запись значение для ключа ключ

Регулярное выражение В настоящее время используется:

Duplicate entry '(.*)' for key '(.*)'

Полученная группа 1: значение

Формат значения ==> некоторый идентификатор - требуемое значение - some id

Чтобы извлечь требуемое значение, я в настоящее время использую первый индекс и последний индекс (-) и извлекаю строку следующим образом:

error.substring(error.indexOf("-") + 1, error.lastIndexOf("-"));

Может лиТо же самое можно сделать только с помощью регулярных выражений?

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

более или менее прямолинейно

var pattern = Pattern.compile("-.*-");
var matcher = pattern.matcher(string);
if (matcher.find())
    result = matcher.group();

-> найти первое вхождение -, за которым следует как можно больше символов, а затем -.Это также работает, если есть - внутри желаемого значения .

Недостаток, черточки включены в результат, но могут быть легко удалены с помощью substring().Этого можно избежать, используя позитивный взгляд / взгляд назад:

...compile("(?<=-).*(?=-)");
0 голосов
/ 17 октября 2018

Мы можем сделать это с помощью одной строки, используя String#replaceAll:

String input = "some id-desired - d - d- value-some id";
String output = input.replaceAll("^.*?-(.*)-.*", "$1");
System.out.println(output);

Вывод:

desired - d - d- value

Шаблон, который я использовал осторожно, потребляет все до самого первого тире,Затем он жадно поглощает все, что находится между первым и последним штрихом.Странные примеры данных, но я хотел показать, что ответ устойчив к штрихам, встречающимся внутри нужных данных.

...