如何通過該單詞的熟悉存根串列洗掉或替換字串中的熟悉單詞?
串列包含約 40 個存根(子字串)。有了所有這些,我希望替換成數百個匹配的單詞。
我對公式解決方案感興趣,因為我已經知道如何做到這一點,編碼 VBA。
我用 FILTERXML 玩 TEXTJOIN,但它不能用于大存根串列:
公式 1. FILTERXML(一一輸入的存根)
=IFERROR(TEXTJOIN(" ";;FILTERXML("<A><B>"&SUBSTITUTE(A2;" ";"</B><B>")&"</B></A>";"//B[not(contains(., 'auti') or contains(., 'AuTi') or contains(., 'tion') or contains(., 'mpl') or contains(., 'Mpl')or contains(., 'etc'))]"));"")
結果很好,但不幸的是區分大小寫,因此所有大寫版本(Propercase、UPERCASE、小寫、MixEdCase)的一個一個輸入的子字串會生成一個非常大的公式,由于長度限制(255 個字符)而無法使用。
公式 2. FILTERXML(帶案例翻譯)
=IFERROR(TEXTJOIN(" ";;FILTERXML("<T><S>"&SUBSTITUTE(A2;" ";"</S><S>")&"</S></T>";"//S[not(contains(translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'),'auti')or contains(., 'tion')or contains(., 'mpl')or contains(., 'etc'))]"));"")
結果顯然很好,但有一些奇怪的錯過了大寫匹配(檢查附圖中的單元格 D14)。為避免這種情況,我可以為每個存根使用翻譯,translate(., 'AUTI', 'auti'),'auti')但長度限制不會讓我使用所有串列。
公式 3. FILTERXML(降低所有字串)
=IFERROR(TEXTJOIN(" ";;FILTERXML("<A><B>"&SUBSTITUTE(LOWER(A2);" ";"</B><B>")&"</B></A>";"//B[not(contains(., 'auti')or contains(., 'tion') or contains(., 'mpl') or contains(., 'etc'))]"));"")
結果很好,但輸出字串完全較低。而且長度限制仍然存在。

也許 FILTERXML 不是這個任務的好方法,或者我做錯了什么。不幸的是,Xpath v1 不允許 match() 之類的東西
uj5u.com熱心網友回復:
非常好的問題,但是您正在將通過 Excel-2019 制作的公式的功能擴展到它的極限。matches()考慮到 xpath 1.0 的限制(沒有串列/陣列處理),這是我想出的:

中的公式B1:
=TEXTJOIN(" ",,INDEX(FILTERXML("<t><s>"&SUBSTITUTE(A1," ","</s><s>")&"</s></t>","//s"),FILTERXML("<x><t>"&TEXTJOIN("</s></t><t>",,IFERROR(ROW($1:$99)&"<s>"&FILTERXML("<t><s>"&SUBSTITUTE(LOWER(A1)," ","</s><s>")&"</s></t>","//s"),""))&"</s></t></x>","//t[.//*[not(contains(., '"&TEXTJOIN("') or contains (., '",,{"auti","tion","mpl","etc"})&"'))]]")))
我已經針對 40 個專案的陣列進行了測驗,比如 3-4 個字符長,它沒有超過兩個TEXTJOIN()引數的限制,也沒有超過它可以處理的字符限制。
這是一個陣列輸入公式 (CSE)。
總結一下它的作用:
- 在空間上拆分您的輸入(保持案例規格完整);
- 創建一個新的輸入字串
TEXTJOIN(),使用另一個級別的 xpath childs 給每個單詞一個索引; - 我們
FILTERXML()回傳不包含您指定的任何陣列元素的每個索引; - 使用這些數字從第一步中檢索所有節點并將它們連接在一起;
- 請注意,這會影響標點符號。
請注意,使用 ms365 的 lambda 輔助函式,這將變得更加容易REDUCE():
=REDUCE(A1,{"auti","tion","mpl","etc"},LAMBDA(a,b,TEXTJOIN(" ",,FILTERXML("<t><s>"&SUBSTITUTE(a," ","</s><s>")&"</s></t>","//s[not(contains(translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz'), '"&b&"'))]"))))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/443875.html
標籤:擅长 xml 路径 excel公式 excel-2019
下一篇:XSD中正則運算式的限制基礎
