2016-09-15 2 views
1

Я хочу, чтобы извлечь целый абзац из CLOB, который я преобразуется в String, проблема с регулярным выражением Я написалэкстракт абзац из текста сохраняется на CLOB

Абзац начать с ДОПОЛНИТЕЛЬНОЕ РАЗВЕЙТЕ ДЕТАЛЕЙ, но проблема это утверждение может содержать несколько пробелов, пустые строки или текст и может заканчиваться пробелами, пустыми строками, текстом, строкой ***** или строкой #####.

примеров: как ниже:

1. /********* НЕКОТОРОЙ BLANK ЛИНИЯ *****/

ДОПОЛНИТЕЛЬНЫЕ ПОСЛЕДУЮЩИЕ ПОДРОБНОСТИ: некоторый текст .... ..... какой-либо текст ...................... .......... какой-либо текст.

2. /********* НЕКОТОРЫЕ BLANK ЛИНИИ *****/

ДОПОЛНИТЕЛЬНЫЕ ПОСЛЕДУЮЩИЕ ДЕТАЛИ:

/********* НЕКОТОРЫХ BLANK LINES *****/

какой-либо текст ......... какой-либо текст ...................... .. ........ некоторые текстовые

3. /********* нЕКОТОРЫЕ BLANK ЛИНИИ *****/

ДОПОЛНИТЕЛЬНЫЕ ПОСЛЕДУЮЩИЕ ДЕТАЛИ:

/********* НЕКОТОРОГО BLANK ЛИНИЯ *****/

некоторый текст ......... некоторый текст ... ................... .......... какой-либо текст.

некоторый текст .......


4. /####### НЕКОТОРЫХ TEXT ###############/

ДОПОЛНИТЕЛЬНЫЕ ПОСЛЕДУЮЩИЕ ДЕТАЛИ:

/********* нЕКОТОРЫЕ BLANK ЛИНИИ *****/ некоторые текст ......... некоторый текст ..... ................. .......... какой-либо текст.

какой-либо текст .......

линия (*) **************** -

здесь то, что я пытался до сих пор: общественности статической строки getSentence (текстовая строка, строка слово) {

 final String lcword = word.toLowerCase(); 

     return END_OF_SENTENCE.splitAsStream(text) 

       .filter(s -> s.toLowerCase().contains(lcword)) 

       .findAny() 

       .orElse(null); 

    } 



    private static String processUpdateCmpln(String text) throws IOException{ 

      //String lines = we.getText(); 

       String ResultString = null; 

       Pattern regex = Pattern.compile("\\.*ADDITIONAL FOLLOW UP DETAILS:\\s+(.*)[\\n*]$", Pattern.DOTALL); 

       Matcher regexMatcher = regex.matcher(text); 

       if (regexMatcher.find()) { 

        ResultString = regexMatcher.group(1); 

       } 

         return ResultString; 





    } 

    //3609601 

    private static String processUpdateCmplns(String text) throws IOException{ 

      //^.*\b(ADDITIONAL FOLLOW UP DETAILS:)\b.*$ 

      Pattern p = Pattern.compile("(?s)ADDITIONAL FOLLOW UP DETAILS:\\s*(.*?)((?:\r?\n+|\r){2,}|$)"); 





    Matcher m = p.matcher(text); 

    String ResultString = null; 

    while (m.find()) { 

      ResultString=m.group(1); 

    } 

EDIT:

реальный пример, как показано ниже:

Мне нужно извлечь текст из ДОПОЛНИТЕЛЬНЫХ РАЗВЕЙТЕ ПОДРОБНОСТИ: для ERP 18MAR2016, Обратите внимание ДОПОЛНИТЕЛЬНЫЕ РАЗВЕЙТЕ DET АИБС: может появляться более одного раза

18-Mar-2016 12:50 (GMT-4: 00) добавляют Лоло:

ЗАПРОС #: 98765432

СВЯЗАННЫЕ СЛУЧАЙ TR (S) ЕСЛИ ПРИМЕНИМО : нет

ПРИЧИНА ВЗАИМОДЕЙСТВИЯ: Некоторые текст ..

IF ПОТЕНЦИАЛ ПРИОРИТЕТ PC = дА (указать, почему): нет

нЕ ИМЕЕТ ПРОДУКТА С проблемой были использованы: да

ПРОДУКТ ЗАМЕНА ЗАПРОШЕННЫЙ (ДА/НЕТ, НЕКОТОРЫЙ ТЕКСТ НЕКОТОРОГО ТЕКСТА НЕКОТОРОГО ТЕКСТ): нет

ДОПОЛНИТЕЛЬНЫХ ПОСЛЕДУЮЩИХ ДЕТАЛЕЙ:

Некоторого text..Some text..Some text..Some текст .. Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... ..Кто-то текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст .. Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... ..Some текст..Some текст..Some текст..Some текст..Some текст..Some текст .. Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... ..Кто-то текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст .. Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... ..Кто-то текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст .. Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... ..Кто-то текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст .. Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... ..Каждый текст..Каждый текст ..

ERP 18MAR2016


17-Mar-2016 12:30 (GMT-4: 00) добавил Джон:

РАЗВЕЙТЕ ШАБЛОН

СПРОС #: 1234567

СЛУЧАЙНЫЙ СЛУЧАЯ TR (S) ЕСЛИ ПРИМЕНИМЫЕ: Не применимо

ПРИЧИНА ДЛЯ ВЗАИМОДЕЙСТВИЯ: НЕКОТОРЫЕ ТЕКСТЫ Т Some Text Some Text

ЕСЛИ ВОЗМОЖНОСТЬ ПРИОРИТЕТ ПК = ДА (указать, почему): См первоначальный запрос

ИМЕЕТ ПРОДУКТА с проблемой были использованы: См первоначальный запрос

ПРОДУКТ ЗАМЕНЫ ЗАПРОШЕННЫЙ (ДА/НЕТ часть текста Some Text Some Text): См первоначальный запрос

ДОПОЛНИТЕЛЬНЫЕ ПОСЛЕДУЮЩИЕ ДЕТАЛИ:

Некоторые text..Some text..Some text..Some text..Some text..Some text..Some текст..Каждый текст..Каждый текст..Каждый текст..Som e text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text ..Кто-то текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст .. Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты .. Некоторые тексты ..

..Кто-то текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст .. Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... ..Кто-то текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст .. Некоторый текст. Какой-то текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст .. Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... ..Кто-то текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст..Каждый текст .. Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... Некоторые тексты ... ..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some текст ..

RLH 17MAR2016

+0

Попробуйте 'String pat =" (? Sm)^ДОПОЛНИТЕЛЬНЫЕ ДЕТАЛИ ПОСЛЕДУЮЩИХ ДЕТАЛЕЙ: (?: (?!^ДОПОЛНИТЕЛЬНЫЕ ДЕТАЛИ ПОСЛЕДУЮЩИХ ДЕТАЛЕЙ:).) * ";', См. Https://regex101.com/r/pH8yK8/ 1 –

+0

Или аналогичная развернутая ['String pat =" (? M)^ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ: (. * (?: \ R? \ N (?! ДОПОЛНИТЕЛЬНЫЕ СЛЕДУЮЩИЕ ДЕТАЛИ:). *) *) "; '] (https://regex101.com/r/pH8yK8/3) –

+0

Является ли' ДОПОЛНИТЕЛЬНЫЕ СЛЕДУЮЩИЕ ДЕТАЛИ' в начале строки? Если нет, вам нужно добавить '\ s *' к шаблонам выше после '^'. –

ответ

1

Я считаю, что вам необходимо следующее:

String val = "18-Mar-2016 12:50 (GMT-4:00) added by lolo :\n\nREQUEST#: 98765432\n\nRELATED CASE TR(S) IF APPLICABLE: none\n\nREASON FOR INTERACTION: Some text..\n\nIF POTENTIAL PRIORITY PC = YES (INDICATE WHY): no\n\nHAS THE PRODUCT WITH THE PROBLEM BEEN USED: yes\n\nPRODUCT REPLACEMENT REQUESTED (YES/NO, SOME TEXT SOME TEXT SOME TEXT): no\n\nADDITIONAL FOLLOW UP DETAILS:\n\nSome text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..\n\nERP 18MAR2016\n\n17-Mar-2016 12:30 (GMT-4:00) added by John:\n\nFOLLOW UP TEMPLATE\n\nREQUEST#: 1234567\n\nRELATED CASE TR(S) IF APPLICABLE: Not applicable\n\nREASON FOR INTERACTION: SOME TEXT SOME TEXT SOME TEXT\n\nIF POTENTIAL PRIORITY PC = YES (INDICATE WHY): See original request\n\nHAS THE PRODUCT WITH THE PROBLEM BEEN USED: See original request\n\nPRODUCT REPLACEMENT REQUESTED (YES/NO, SOME TEXT SOME TEXT SOME TEXT): See original request\n\nADDITIONAL FOLLOW UP DETAILS:\n\nSome text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..\n\nSome text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..Some text..\n\nRLH 17MAR2016"; 
String pat = "(?s)ADDITIONAL FOLLOW UP DETAILS:((?:(?!\\b[A-Z]{3}\\b).)*)\\b[A-Z]{3}\\b"; 
Pattern ptrn = Pattern.compile(pat); 
Matcher m = ptrn.matcher(val); 
while (m.find()) { 
    System.out.println(m.group(1).trim()); 
    System.out.println("---- NEXT ------"); 
} 

См. Java demo

Вот regex demo.

Обратите внимание, что для получения нескольких совпадений необходимо использовать while (matcher.find()).

картина совпадает:

  • ADDITIONAL FOLLOW UP DETAILS: - это символьная строка
  • ((?:(?!\b[A-Z]{3}\b).)*) - Группа 1 (matcher.group(1)) захвата любого символа, который не является отправной точкой для заглавной последовательности букв 3, которая является целым словом
  • \b[A-Z]{3}\b - ведущая граница слова + 3 прописные буквы ASCII + задний границы слова (в целом 3-заглавная буква слова)
+0

Я обновил ответ с помощью '(?: (?! [ A-Z] {2}).) * Бит. –

+0

Большое спасибо за ваше терпение, но я обновил вопрос с помощью реального примера, регулярное выражение, которое вы предоставили, не работает так, как ожидалось, поскольку оно не работает в приведенном мной примере. – Ravi

Смежные вопросы