簡體   English   中英

OpenRefine正則表達式和GREL匹配錯誤

[英]OpenRefine Regex and GREL match error

openRefine我想在網站源上運行以下正則表達式,以查找帶有mailto鏈接的電子郵件地址。 我的麻煩是運行value.match時遇到此錯誤:

偏移12處的解析錯誤:正則表達式錯誤(索引10附近的未封閉字符類。* mailto:[^ ^)

我已經在沒有value.match的另一個環境中測試了該表達式,並且可以正常工作。

value.match(/.*mailto:[^/"/']*.com.*/)
isNotNull(value.match(/.*mailto:[^\"\']*.com.*/)) 

如我們對match()函數的參考頁中所述,它會在RegEx模式中返回一組捕獲組,然后isNotNull()如果您的值類似於該模式,則輸出True或False: https : //github.com/OpenRefine / OpenRefine / wiki / GREL-String-Functions#matchstring-s-regexp-p

在此處也進行了描述: https : //github.com/OpenRefine/OpenRefine/wiki/Understanding-Regular-Expressions#basic-examples

您還可以按照Wiki上的食譜中的說明使用get(),但只有在每個單元格只有1個電子郵件地址的情況下,BUT才能很好地工作(這是因為get()函數不帶數字或非數字,進行假設並使用長度)確定最后一個元素並僅推出最后一個元素,而不是第一個或第三個,等等): https : //github.com/OpenRefine/OpenRefine/wiki/Recipes#find-a-sub-pattern在字符串的末尾存在

例如:

get(value.match(/.*(mailto:[^\"\']*.com).*/),0)

因此,如果您有以下文字:

Blah blah <a href="mailto:j.bloggs@example.com">mail me</a>

要使用OpenRefine中的匹配功能提取電子郵件地址,您需要使用:

value.match(/.*mailto:([^\"\']*.com).*/)

這將提供一個包含電子郵件地址的數組,該電子郵件地址是使用捕獲組捕獲的。 要從數組中提取電子郵件地址(如果要將郵件地址存儲在OpenRefine單元中,這是必需的),則需要從數組中獲取字符串值。 例如:

value.match(/.*mailto:([^\"\']*.com).*/)[0]

您的原始表達式與該表達式之間的區別在於,字符可以正確轉義並且有一個捕獲組-基本上在上述注釋中實現了@LukStorms的建議。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM