
Quero encontrar uma string como DOI em uma frase e extrair o resultado em uma célula. Encontrei a função »regex« no LibreOffice Calc (versão atual 6.2.4.2) que me diz que faria exatamente o que eu quero.
Exemplo:
Foo bar doi: 10.1016/j.cmpb.2018.09.006 baar foooo
Meu regex em python é:
\b(10[.][0-9]{4,}(?:[.][0-9]+)*\/(?:(?![\"&\'<>])\S)+)\b
e combina bem com um script python (corresponde exatamente ao número doi sem a string »doi«, que é pretendida).
Mas a função »regex« recusa esta regex. A documentação menciona as expressões ICU Regex, onde não consigo encontrar nenhum problema em comparação com meu regex.
Estou sentindo falta de alguma coisa? Qual »dialeto regex« é aplicável ao LibreOffice?
Responder1
Na lista deexpressões regularessuportadas pelo LibreOffice, a maioria das expressões padrão são suportadas, mas faltam dois dos elementos que você usa:
- o uso de
?:
para um grupo não capturador; o uso de
?!
para uma visão negativa.1 1 2 | | | v v v \b(10[.][0-9]{4,}(?:[.][0-9]+)*/(?:(?!["&'<>])\S)+)\b
Não sei que nível de RE isso representa (parece ser BRE com acréscimos), mas significa que seu RE não corresponderá à sua sequência de teste.
Não está claro quanto da sua string constitui o número que você está tentando isolar, então não posso sugerir como você pode evitar os elementos não suportados, mas estas são algumas possibilidades:-
- Se você precisar da sequência numérica entre
doi:
e/
, o mais simples\b10[.][0-9]{4,}(?:[.][0-9]+)*
será suficiente. - Se você precisar de tudo entre
doi:
o próximo espaço, poderá usar\b10[.][0-9]{4,}(?:[.][0-9]+)*[^\s]*
.
(Este segundo caso dá a mesma correspondência que o seu RE emRegExr.)
Sei que seus dados ativos podem ter mais exceções que devem ser capturadas, mas sem um conhecimento completo de seus dados e do número que você está tentando corresponder, não posso fazer mais.