
我想在句子中找到類似 DOI 的字串,並將結果提取到單元格中。我在 LibreOffice Calc(目前版本 6.2.4.2)中找到了「regex」函數,它告訴我它完全可以執行我想要的操作。
例子:
Foo 酒吧 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 正規表示式,與我的正規表示式相比,我找不到任何問題。
我錯過了什麼嗎?哪一種「正規表示式方言」適用於 LibreOffice?
答案1
在清單中常用表達LibreOffice 支持,支援大多數標準表達式,但缺少您使用的兩個元素:
- 用於
?:
非捕獲組; 使用 進行
?!
負向預測。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 上的匹配相同正規表示式.)
我意識到您的即時數據可能有更多必須捕獲的異常,但如果不完全了解您的數據和您嘗試匹配的數字,我無法做更多的事情。