
文章中の DOI のような文字列を検索し、その結果をセルに抽出したいと考えています。LibreOffice Calc (現在のバージョン 6.2.4.2) で「regex」関数を見つけましたが、これがまさに私が望んでいることを実行することがわかりました。
例:
Foo バー doi: 10.1016/j.cmpb.2018.09.006 バール foooo
私の Python の正規表現は、次のとおりです。
\b(10[.][0-9]{4,}(?:[.][0-9]+)*\/(?:(?![\"&\'<>])\S)+)\b
これは Python スクリプトに適しています (意図したとおり、»doi« 文字列なしで doi 番号と正確に一致します)。
しかし、»regex« 関数はこの正規表現を拒否します。ドキュメントには ICU 正規表現式について記載されていますが、私の正規表現と比較して問題は見つかりません。
何か見落としているのでしょうか? LibreOffice に適用できる「正規表現方言」はどれですか?
答え1
リストには正規表現LibreOffice でサポートされているため、標準的な表現のほとんどはサポートされていますが、使用する要素のうち 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]*
。
(この2番目のケースは、正規表現。
ライブ データには捕捉する必要がある例外がさらに存在する可能性があることは承知していますが、データと一致させようとしている数値を完全に把握していないと、それ以上のことはできません。