Функция LibreOffice Calc »regex« — какой формат регулярных выражений применим?

Функция LibreOffice Calc »regex« — какой формат регулярных выражений применим?

Я хочу найти строку типа DOI в предложении и извлечь результат в ячейку. Я нашел функцию »regex« в LibreOffice Calc (текущая версия 6.2.4.2), которая говорит мне, что она сделает именно то, что мне нужно.

Пример:

Foo bar doi: 10.1016/j.cmpb.2018.09.006 baar foooo

Мое регулярное выражение на Python выглядит так: \b(10[.][0-9]{4,}(?:[.][0-9]+)*\/(?:(?![\"&\'<>])\S)+)\b и оно хорошо подходит мне в скрипте Python (оно точно соответствует номеру DOI без строки »DOI«, что и подразумевается).

Но функция »regex« отвергает это регулярное выражение. В документации упоминаются выражения ICU Regex, где я не могу найти никаких проблем по сравнению с моим регулярным выражением.

Я что-то упустил? Какой »диалект регулярных выражений« применим для LibreOffice?

решение1

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

  1. использование ?:для незахватывающей группы;
  2. использование ?!для отрицательного прогноза.

                      1              1  2
                      |              |  |
                      v              v  v
    \b(10[.][0-9]{4,}(?:[.][0-9]+)*/(?:(?!["&'<>])\S)+)\b
    

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

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

  • Если вам нужна числовая строка от doi:до /, то более простого варианта \b10[.][0-9]{4,}(?:[.][0-9]+)*будет достаточно.
  • Если вам нужно все, что находится между doi:и следующим пробелом, то вы можете использовать \b10[.][0-9]{4,}(?:[.][0-9]+)*[^\s]*.

(Этот второй случай дает то же самое совпадение, что и ваш RE наРегЭкср.)

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

Связанный контент