簡體   English   中英

正則表達式刪除XML以外的所有內容

[英]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.

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