2017-07-30 41 views
1

如果我有一個大文本,並且我只需要保留匹配的內容,我該怎麼做?刪除所有內容但保持匹配

舉例來說,如果我有這樣的文字:

asdas8Isd8m8Td8r 
asdia8y8dasd 
asd8is88n8gd 
asd8t8od8lsdas 
as9ea9ad8r1n88r8e87g6765ejasdm8x 

,並使用此正則表達式:一個號碼後[0-9]([a-z])將所有信件和其他具有\1代替我會repace所有(號)(字母)至(信)(如果我想刪除其餘的只與匹配信留)?...

轉換這個文本

ImTr 
y 
ing 
tol 
earnregex 

哪有我用分組替換這個文本並刪除剩下的部分?

如果我想刪除所有,但沒有匹配? 在這種情況下,文本轉換爲:

8I8m8T8r 
8y8d 
8i8n8g 
8t8o8l 
9e9a9r1n8r7g5e8x 

我可以匹配所有不是[0-9]([a-z])

謝謝! :d

+0

您應該改善的措辭。很難理解你的真實含義。如果你這樣做,我們將能夠提供更準確的答案。 – SkryptX

+0

你確定你想要'y'而不是'yd'在第二行嗎?嘗試用'(?is)[0-9]([az])| .'替換爲'(?{1} $ 1:)' –

+0

我試圖刪除所有文本,但只保留匹配... – Emanuel

回答

2

您可以使用下面的正則表達式:

(?i-s)[0-9]([a-z])|. 

替換(?{1}$1:)

要刪除所有但不匹配,使用相同的正則表達式使用(?{1}$0:)替換。

詳細

  • (?i-s) - 內聯修改打開不區分大小寫的模式,並關閉DOTALL模式(.不匹配換行符)
  • [0-9]([a-z]) - 一個ASCII數字,任何ASCII字母捕獲到組1中(後來以$1\1反向引用來自字符串替換模式)
  • | - 或
  • . - 任何字符但行換行字符。

更換細節

  • (?{1} - 條件置換的開始:如果第1組匹配,然後...
    • $1 - 內容第1組(或整場比賽,如果$0使用反向引用)
    • : - else ... nothing
  • ) - 條件替換模式結束。

enter image description here

+1

非常感謝Guy! :d – Emanuel