Как извлечь предложение в абзаце, используя обычное выражение в java

#java #regex

#java #регулярное выражение

Вопрос:

У меня есть текст абзаца. Я хочу извлечь два или три предложения, которые содержат ключевое слово use regular expression в java

Пример : абзац: ….Меня зовут Том. Я живу со своей семьей в сельской местности. Я люблю животное. Итак, у меня есть собака и кошка. Однако мы много едим……

ключевое слово: собака и кошка

Желаемый результат: я люблю животное. Итак, у меня есть собака и кошка. Тем не менее, мы много едим

Примечание: я использую регулярное выражение в java.

      String line = ".My name is Tom. I live with my family in the countryside. I love the animal. So I have a dog and a cat. However, we eat a lot......  "
      String pattern = "a dog and a cat";
      Pattern r = Pattern.compile(pattern);
      Matcher m = r.matcher(line);
      boolean value= false;
      if (m.find( )) {
          System.out.println(m.toMatchResult());
          System.out.println(m.groupCount());
          System.out.println(m.group());
      } else {
         System.out.println("False");
      }
 

Комментарии:

1. и вы хотите извлечь все слова, начинающиеся с точки и заканчивающиеся точкой, которая содержит собаку и кошку?

2. Если ваше ключевое слово — a dog and a cat как возможно, что ваш желаемый результат будет I love the animal. So I have a dog and a cat. However, we eat a lot ? Какое правило мы должны знать, чтобы получить I love the animal и However, we eat a lot ? Предложение до и после предложения onw с ключевым словом?

3. да.. Это моя цель. Вы можете мне помочь?

Ответ №1:

Вот шаблон, который вы хотите:

 .([^.] .[^.]*a dog and a cat[^.]*.[^.] )
 

Поскольку вы работаете на Java, не забудьте удвоить обратную косую черту при кодировании в виде строки.

По сути, то, что он будет делать, это сопоставлять буквальную точку, затем любую строку символов, которая не является точкой (первое предложение), другую буквенную точку, среднее предложение, содержащее ваш литерал, затем другую последовательность символов, которая не является точкой (третье предложение).

Демонстрация на Regex101

Комментарии:

1. Как выделить ключевое слово жирным шрифтом в результате?

2. @drag: Ummmm… Что?

3. Я хочу, чтобы ключевое слово highlights было в результате.

4. @drag: вам нужно быть более конкретным. Вы хотите вывести выделенный жирным шрифтом текст на консоль? Вы хотите отобразить текст, выделенный жирным шрифтом, на веб-странице? В любом случае, это выходит за рамки этого вопроса.

Ответ №2:

Я создал этот класс для одного из своих проектов. Надеюсь, это поможет.

 import java.text.BreakIterator;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

public class ExtractSentences {

    private String paragraph;
    private BreakIterator iterator;
    private List<String> sentences;


    public ExtractSentences(String paragraph) {
        this.paragraph = paragraph;
        sentences = new ArrayList();
        this.extractSentences();
    }

    public void extractSentences() {

        iterator = BreakIterator.getSentenceInstance(Locale.US);


        iterator.setText(paragraph);

        int lastIndex = iterator.first();

        while (lastIndex != BreakIterator.DONE) {
            int firstIndex = lastIndex;
            lastIndex = iterator.next();

            if (lastIndex != BreakIterator.DONE) {
                String sentence = paragraph.substring(firstIndex, lastIndex);

                sentences.add(sentence);


            }
        }

    }

    public String getParagraph() {
        return paragraph;
    }

    public void setParagraph(String paragraph) {
        this.paragraph = paragraph;
    }

    public void setSentences(List<String> sentences) {
        this.sentences = sentences;
    }

    public List<String> getSentences() {
        return sentences;

    }
}