2016-04-18 21 views
1

我試圖反轉這個表達式:([0-9]{14}), 所以所有的14位數字後跟一個空格。正則表達式去除任何不是14位數字後跟空格

我看上去無處不在,看來最好的方法應該是使用負面預測
但是,當我嘗試應用​​我的案件>>(?!([0-9]{14})),它不起作用。

我在做什麼錯?

我會appreaciate任何意見,謝謝。

重點是刪除所有不是14位數字的文本塊,同時保留這些14位塊。

+0

你能否澄清你在做什麼?在你的問題中,*否定*意味着什麼?刪除與[([0-9] {14})'不匹配的所有內容?突出顯示與其不匹配的所有內容?只是獲取那些不匹配它的子字符串?請具體說明。見['[0-9] {14}(* SKIP)(?!)|(?:(?![0-9] {14})。)+'](https://regex101.com/r/fP4xH4/1)。或[[0-9] {14} |(。)' - >'$ 1'](https://regex101.com/r/fP4xH4/2)。什麼是語言,BTW? –

+0

嗨, 我想選擇什麼不是一個14位數字後跟一個空格。 所以一切都不匹配'([0-9] {14})'這個。 我沒有使用任何特殊語言,只是記事本++或任何實時regExps。 – Yte

+1

好吧,記事本+ ++意味着一個Boost庫。你只是搜索該文本,或者你想刪除它?什麼是最終目標?如果你想刪除所有其他的東西,只需使用'(\ b \ d {14})| .'並替換爲'$ 1'。 –

回答

2

這在任何地方如果要刪除14位數字之後的空格,請使用(\b\d{14})|.並替換爲$1

的模式匹配和捕獲(我們可以參考在替換模式與捕獲backreference文本)的14位的塊,然後一個空格作爲全詞由於\b (a word boundary)。如果未找到該文本,除換行符以外的任何字符都與.匹配,並且未被捕獲(我們不能用反向引用來引用它)。因此,當我們用反向引用替換$1時,我們只是用一個空格來恢復匹配的14位數字組塊。

查看regex demo at regex101.com

enter image description here

爲了獲得清潔視圖,刪除所有空行:Edit>Line Operations>Remove Empty Lines

+0

如果可以有多個連續的14位塊,然後使用一個空格,只需使用'$ 1 |'替換模式,並在上述第一次搜索和替換之後,運行第二個後處理操作,用換行符替換'|' '\ N'。 –

0

您可以使用該負前瞻:

^(?!.*[0-9]{14}) 
  • 請確保您使用的開始錨^
  • 同樣重要的模式之前,使用.*批駁輸入
+0

嗨, 非常感謝,但不幸的是,它不工作。 – Yte

+0

你的輸入字符串是什麼? – anubhava

相關問題