Убрать предложение, содержащее URL - PullRequest
1 голос
/ 15 июня 2019

Я ищу способ удалить предложение, содержащее URL в Java. Обратите внимание, что я хочу удалить все предложение, а не только URL.

Я нашел способ сделать это, и он работает, но я ищу более простой способ сделать это, может быть, только с одним RegEx?

  1. Определение предложения (может заканчиваться на.?!) С помощью BreakIterator: Разделение строки на предложения
  2. Используйте регулярное выражение, чтобы прочитать каждую строку и обнаружить шаблон: Обнаружить и извлечь URL из строки? . Если найден, просто удалите предложение.
String source = "Sorry, we are closed today. Visit our website tomorrow at https://www.google.com. Thank you and have a nice day!";
iterator.setText(source);
int start = iterator.first();
int end = iterator.next();
while(end != BreakIterator.DONE){                
 if(SENT.matcher(source.substring(start,end)).find()) {                  
   source = source.substring(0, start) + source.substring(end);                  
   iterator.setText(source);
   start = iterator.first();
  }else{
    start = end;
  }
  end = iterator.next();
}
System.out.println(source);

This prints : Sorry, we are closed today. Thank you and have a nice day!

Ответы [ 2 ]

0 голосов
/ 15 июня 2019
"(?<=^|[?!.])[^?!.]+" + urlRegex + ".*?(?:$|[?!.])"

Это будет соответствовать каждому целому предложению, чья часть соответствует urlRegex, согласно вашему определению предложения;Вы можете использовать replaceAll, чтобы избавиться от них.(Существует множество регулярных выражений URL, и вы не указали, какой из них вы использовали, поэтому я оставил вам точное определение URL.)

0 голосов
/ 15 июня 2019

Лучше всего сначала разбить / разбить наши предложения, прежде чем они будут пропущены через выражение.

Тогда это выражение может просто возвращать только те строки (предложения), у которых нет URL,

^(?!.*https?[^\s]+.*).*$

Здесь мы определяем URL-адрес как https?[^\s]+.

Демо

Test

import java.util.regex.Matcher;
import java.util.regex.Pattern;

final String regex = "^(?!.*https?[^\\s]+.*).*$";
final String string = "Sorry, we are closed today. Visit our website tomorrow at https://www.google.com. Thank you and have a nice day!\n\n"
     + "Sorry, we are closed today. Visit our website tomorrow at. Thank you and have a nice day!\n\n"
     + "Sorry, we are closed today. Visit our website tomorrow at https://www.goog. Thank you and have a nice day!\n";

final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);

while (matcher.find()) {
    System.out.println("Full match: " + matcher.group(0));
    for (int i = 1; i <= matcher.groupCount(); i++) {
        System.out.println("Group " + i + ": " + matcher.group(i));
    }
}

RegEx Circuit

jex.im визуализирует регулярные выражения:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...