извлечение данных с помощью регулярного выражения

55
6

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

String  Result = "<ahref=https://blabla.com/Securities_regulation_in_the_United_States>Securities regulation in the United States</a> - Securities regulation in the United States is the field of U.S. law that covers transactions and other dealings with securities.";

String [] Arr = Result.split("<[^>]*>");
for (String elem : Arr) {
System.out.printf(elem);
}

результат:

Arr[0]= ""
Arr[1]= Securities regulation in the United States
Arr[2]= Securities regulation in the United States is the field of U.S. law that covers transactions and other dealings with securities.

Arr[1] и Arr[2] в порядке, я просто не могу избавиться от Arr[0].

спросил(а) 2020-04-04T00:41:22+03:00 3 месяца назад
1
Решение
66

Вы можете использовать противоположное регулярное выражение для захвата того, что вы хотите, с помощью регулярного выражения:

(?s)(?:^|>)(.*?)(?:<|$)

Рабочая демонстрация

IDEOne Code работает

Код:

String line = "ahref=https://blabla.com/Securities_regulation_in_the_United_States>Securities regulation in the United States</a> - Securities regulation in the United States is the field of U.S. law that covers transactions and other dealings with securities.";

Pattern pattern = Pattern.compile("(?s)(?:^|>)(.*?)(?:<|$)");
Matcher matcher = pattern.matcher(line);
while (matcher.find()) {
System.out.println("group 1: " + matcher.group(1));
}

ответил(а) 2020-04-04T00:53:39.252984+03:00 3 месяца назад
54

Вы не можете избежать этой пустой строки, если используете только split, тем более, что ваше регулярное выражение не является нулевой длиной.

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


String[] Arr =  Result.replaceFirst("^<[^>]+>","").split("<[^>]+>")

Но обычно вам следует избегать использования регулярных выражений с HTML\XML. Попробуйте использовать парсер вместо Jsoup.

ответил(а) 2020-04-04T00:41:22+03:00 3 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема