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

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

Вот пример

    ABCDEF
     JHJHJNJN<098978686
     <jjg>
    HGHJFGV XXXX    
       10-10-2018
    JHKGHKGHG
        JKHJHHJM
10-10-2019 JGHHGHGVH
HBVJHBHBB

Просто хочу выбрать эту дату 10-10-2018 во всем контенте, который всегда идет после XXX с парой пробелов,Я не могу использовать просто регулярное выражение с конкретным значением (10-10-2018), потому что дату можно изменить, и возможно, что где-то также присутствует шаблон даты, как в примере в последней строке.

Пожалуйста, поделитесь своими мыслями ..!

Спасибо

1 Ответ

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

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

"XXXX.*?[\\s]+([\\d]{1,2}-[\\d]{1,2}-[\\d]{4})"

По сути, поиск XXX сопровождается пробелами / символом новой строкитогда найди дату.Он будет помещен в группу и затем может быть извлечен.

Вы можете увидеть операцию в этом месте , но обязательно выберите "DOTALL".

public String getDate(String input)
{
    String date = "";
    Pattern dte = Pattern.compile("XXXX.*?[\\s]+([\\d]{1,2}-[\\d]{1,2}-[\\d]{4})", Pattern.DOTALL);

    Matcher m = dte.matcher(input);
    if (m.find() && m.groupCount() > 0) {
        date = m.group(1);
    }

    return date;
}

Контрольный пример

@Test
public void testData() throws Exception
{
    RegEx_52879334 re = new RegEx_52879334();
    String input = re.getInputData();

    String date = re.getDate(input);

    assertEquals("10-10-2018", date);
    System.out.println("Found: " + date);
}

Выход:

Найдено: 10-10-2018

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