回答這個問題已經差不多3年了,但有一些Perl正則表達式可以用於這項任務。
查找和刪除在relation
含有相同termName
一個term
塊以上對於術語本身可以用UltraEdit用於Windows v21.10.0.1032和最有可能還與其他的文本編輯器使用的支撐Perl正則表達式所定義的區分大小寫的Perl正則表達式用搜索字符串替換:
^[ \t]*<term>(?:(?!</term>)[\S\s])+<termName>([^\r\n]+?)</termName>(?:(?!</term>)[\S\s])+<relation>(?:(?!</term>)[\S\s])+<termName>\1</termName>(?:(?!</term>)[\S\s])+</term>[ \t\r]*\n
替換字符串是一個空字符串。
說明:
^
......開始在一行的開頭每個搜索。
[ \t]*
...行的開頭可以有0個或多個空格或製表符。
<term>
......這個字符串必須在下一行找到。
下一頁棘手的表達式如下這是需要的任何字符匹配感興趣,但以避免在明年term
塊匹配的東西下一個字符串,如果其餘的表達並不當前term
塊返回一個積極的結果。
(?:(?!</term>)[\S\s])+
...此表達式找到任何字符,因爲[\S\s]
匹配任何非空白字符或任何空格字符。由於+
,下一個固定字符串必須至少有1個字符,但它也可以是更多字符。此外,Perl正則表達式必須使每個匹配的字符都向前看,以檢查是否不符合</term>
。如果當前匹配字符的右側存在字符串</term>
,則Perl正則表達式引擎必須停止匹配流中當前位置的任何字符,並繼續搜索字符串的下一部分。所以這個表達式可以匹配任何字符,但不能超出</term>
,因此只有<term>
和</term>
之間的字符。由於?:
沒有任何東西被捕獲/標記爲通過此表達式進行反向引用。
<termName>
...此固定字符串必須位於term
塊內。
([^\r\n]+?)
...匹配術語名稱的字符並捕獲/標記此字符串以反向引用。除了否定字符類表達式[^\r\n]
之外,還可以使用其他類定義,或者僅當點不匹配新行字符時纔可以使用.
。如果未編碼的開角尖括號不可能是詞項名稱的一部分,也可能是([^<]+)
。字符<
必須根據XML規範使用<
進行編碼,除了CDATA塊內的元素值以外。
</termName>
...此固定字符串在term
塊內必須在下一個找到。
(?:(?!</term>)[\S\s])+
...再次term
內的任意字符堵到下一個固定字符串。
<relation>
......一個term
塊中這個固定字符串必須發現旁邊。
(?:(?!</term>)[\S\s])+
...再次term
內的任意字符堵到下一個固定字符串。
<termName>
...此固定字符串必須位於term
塊內。
\1
...此表達後面引用捕獲/標記項名稱,並且因此下一個字符串必須是相同的如上文所定義的術語的名稱。
</termName>
...此固定字符串在term
塊內必須在下一個找到。
(?:(?!</term>)[\S\s])+
...再次term
內的任意字符堵到下一個固定字符串。
</term>
...這個固定的字符串標誌着term
塊的一端必須發現旁邊。
[ \t\r]*\n
...匹配0個或多個空格,製表符和回車符,然後是一個換行符。所以這個表達式適用於DOS/Windows(CR + LF)和Unix(僅LF)文本文件。
也有可能用UltraEdit是:
(?s)^[ \t]*<term>(?:(?!</term>).)+<termName>([^<]+?)</termName>(?:(?!</term>).)+<relation>(?:(?!</term>).)+<termName>\1</termName>(?:(?!</term>).)+</term>[ \t\r]*\n
(?s)
...這個表達在搜索字符串的開頭從匹配任何字符,除了行結束,真正的任何字符改變了.
行爲,因此.
現如[\S\s]
。
現在閱讀您的文章3次,我沒有得到你想達到的。你可以添加一個「後」列表。你在哪個操作系統上? 「告訴它,如果在=部分混淆我...... –
對不起,關於這個。非首選術語應該建議具有不同名稱的首選術語。它在中執行此操作,然後指定要使用的首選術語的ID和名稱。在上面的例子中,xml告訴系統使用與首選項相同的名稱作爲非首選項。因此,查找和替換將通過,找到這兩個屬性的值是相同的,並且在哪裏刪除整個術語。所以在上面的例子中,整個術語將被刪除。如果關係中的termName中的值不同,則不會有任何更改。 –
Charlie
我在Windows上,但如果需要我可以使用mac。因此,在上面,整個事情將被丟棄,因爲關係中的termName =中的termName。如果它們不同,則什麼都不會改變。 –
Charlie