[英]Regex to remove all except XML
我需要有關Notepad ++的正則表達式的幫助,以匹配除XML以外的所有內容
我正在使用的正則表達式: (!?\\<.*\\>)
<-我想要與此相反(在前三行中)
示例代碼:
[20173003] This text is what I want to delete [<Person><Name>Foo</Name><Surname>Bar</Surname></Person>], and this text too.
[20173003] This is another text to delete [<Person><Name>Bar</Name><Surname>Foo</Surname></Person>]
[20173003] This text too... [<Person><Name>Lorem</Name><Surname>Ipsum</Surname></Person>], delete me!
[20173003] But things like this make the regex to fail < [<Person><Name>Lorem</Name><Surname>Ipsum</Surname></Person>], or this>
預期結果:
<Person><Name>Foo</Name><Surname>Bar</Surname></Person>
<Person><Name>Bar</Name><Surname>Foo</Surname></Person>
<Person><Name>Lorem</Name><Surname>Ipsum</Surname></Person>
<Person><Name>Lorem</Name><Surname>Ipsum</Surname></Person>
提前致謝!
這並不完美,但是應該與看起來非常簡單且結構合理的輸入一起使用。
如果只需要處理一個未嵌套的<Person>
標記 ,則可以使用簡單的(<Person>.*?</Person>)|.
regex(將匹配任何<Person>
標記並將其捕獲到組1中並將匹配任何其他字符)並替換為條件替換模式(?{1}$1\\n:)
(它將在其后用換行符重新插入Person
標記)或將匹配項替換為空字符串):
為了使它更加通用 ,您可以使用基於遞歸的Boost regex和適當的條件替換模式來捕獲打開和關閉的XML標簽:
查找內容 : (<(\\w+)[^>]*>(?:(?!</?\\2\\b).|(?1))*</\\2>)|.
替換為 : (?{1}$1\\n:)
.
匹配換行符 : ON
正則表達式詳細信息 :
(<(\\w+)[^>]*>(?:(?!</?\\2\\b).|(?1))*</\\2>)
-捕獲組1(稍后會遞歸與(?1)
子路由調用)匹配
<(\\w+)[^>]*>
-名稱在組2中的任何開頭標簽 (?:(?!</?\\2\\b).|(?1))*
-零次或多次出現:
(?!</?\\2\\b).
-任何不以整個單詞開頭</
+標簽名稱的序列的字符( .
),其前面帶有可選的/
|
- 要么 (?1)
-重復執行第1組整個子模式 </\\2>
-相應的結束標記 |
- 要么 .
-任何單個字符。 更換方式 :
(?{1}
-如果第1組匹配:
$1\\n
替換為內容+換行符 :
-否則替換為空字符串 )
-替換模式結束。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.