我有一個服務爲我填充空的XML文檔。但是,因爲在該文檔中元素內容是空的,所以這些元素標籤以縮寫形式寫入。爲了能夠填寫值,我必須將標籤擴展到開始標籤和結束標籤。是否有可能通過regulax表達替換來做到這一點?如何用正則表達式替換來擴展XML標籤
回答
我用下面的正則表達式來檢測壓實XML元素,並且在膨脹的版本替換它們:
<([^\s>]+)([^<>]*)(\/>)
而更換模板看起來是這樣的:
<$1$2></$1>
的機制是相當straigtforward 。第一組([^ \ s>] +)檢測到XML元素名稱。第二組([^ <> *)檢測到所有屬性和名稱空間(如果適用)並且最後一組檢測到壓縮元素的結束標記。
<CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
翻譯成:
<CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"></CanonicalizationMethod>
好的和簡單的解決方案 –
是的。有可能的。
使用此正則表達式搜索:
<(.*)\/>
而這正則表達式來代替:
<$1><\/$1>
這不起作用:這將匹配第一次打開'<'和最後一次'/>'之間的所有內容 –
在我的用例中,每行只有一個標籤,所以我沒有遇到這個問題。 –
ahh - 當提問一個問題時,如果包含一些源代碼會很有幫助,這樣我們就可以看到你在做什麼 - 特別是在幫助編寫正則表達式的情況下。 –
雖然你的答案是正確的差不多,它沒有考慮幾種可能性。
首先,如果所有的元素都沒有被新線分離,那麼你的正則表達式匹配整條生產線,到counterract這一點,它需要發懶,L像這樣:
<(.*?)\/>
這意味着它將匹配<和/>
之間最短的表達然後,我們有它將匹配任何數量的正常元件的問題,其次是一個空的一種,例如:
<test1></test1></test2/>
因爲它仍然匹配的第一個<和下/>
所以我們需要使用負前瞻,所以它只匹配不包含其他>元素之間的一切 - 就像這樣:
<((.(?!>))*?)\/>
那麼你的第一個捕獲組還應該包含您希望與
<$1><\/$1>
警告更換元素的名稱:如果任何元素包含屬性,那麼他們將被列入我結束標記,這也不起作用。
哦 - 也匹配所有'。'不需要在負面視圖被加入後變得懶惰,所以<((.(?!>))*)\ />應該足夠了 –
- 1. 正則表達式替換標籤
- 2. 正則表達式替換標籤
- 3. 正則表達式替換HTML標籤
- 4. 用正則表達式替換xml標籤
- 5. 用正則表達式替換xml標籤值
- 6. 正則表達式來替換文件擴展名
- 7. C#正則表達式來替換樣式HEIGHT標籤
- 8. 替代正則表達式來獲取xml標籤的內容
- 9. 如何用PHP中的正則表達式替換「@」後標籤?
- 10. Java的正則表達式替換XML標籤名
- 11. 正則表達式替換XML標籤(不是內容)
- 12. 如何使用正則表達式來查找和替換html表標籤?
- 13. 如何用正則表達式替換<(<)之間的xml標籤?
- 14. 正則表達式來替換輸入標籤
- 15. Vim正則表達式來替換標籤
- 16. 擴展正則表達式
- 17. 多行正則表達式替換標籤內部的標籤?
- 18. 正則表達式替換標籤在C#中的標籤?
- 19. 正則表達式來替換模式
- 20. 正則表達式替換XML屬性
- 21. XML正則表達式替換
- 22. 正則表達式替換* .xml
- 23. vb.net正則表達式 - 替換標籤而不替換span標籤
- 24. 正則表達式的XML標籤
- 25. 正則表達式來替換鏈接
- 26. 正則表達式來替換路徑
- 27. 正則表達式來替換地址
- 28. PHP正則表達式來替換{
- 29. 正則表達式來替換零
- 30. 正則表達式來替換字符
什麼語言/程序是你在工作? - 可以幫助正則表達式,但不需要更多信息 –
我正在將它用於SOAP UI中的XML消息。 –
你應該在xml或html上使用正則表達式。有更好的方法使用xml和html類。 Xml和Html不正規,用正則表達式要困難得多。 Xml Linq通常很容易添加標籤,刪除標籤和修改值。 – jdweng