2017-07-31 87 views
1

我曾嘗試使用此正則表達式刪除冒號前的所有內容,但是它會反覆刪除。正則表達式:如何刪除每行冒號前的所有內容

^[^:]+:\s* 

下需要從

afghanistan : Afghanistan 
albania : Albania 
algeria : Algeria 
andorra : Andorra 
angola : Angola 

改變

Afghanistan 
Albania 
Algeria 
Andorra 
Angola 

任何指針?

+0

你在哪裏使用這個(工具/語言)?如果記事本++請參閱https://stackoverflow.com/questions/40017426/notepad-regex-issue-with-anchor-and-repeating-patterns –

+1

我正在使用括號。以下由@WiktorStribiżew的答案工作得很好。 –

回答

0

如果你想確保你跨線不會溢出,你需要添加\r\n到否定字符類和替換\s可以匹配換行符與\h(水平空白圖案)(或[ \t]如果不支持\h )。

所以,你可以使用

^[^:\r\n]+:\h* 

see demo)或

^[^:\r\n]+:[ \t]* 

與空字符串(another demo)取代。

在記事本++,您需要將整行匹配擺脫遞歸行爲:

^[^:\r\n]+:\h*(.*) 

替換\1。見yet another regex demo

圖案的詳細資料

  • ^ - 開始一個線的(如果不是默認值,在前面加上(?m)直列改性劑)
  • [^:\r\n]+ - 1或大於:,CR其它更多字符和LF
  • : - 冒號
  • \h* - 零個或多個水平空格
  • (.*) - 第1組(從\1$1替換爲替換模式)儘可能多(直到行尾)捕獲除換行符之外的零個或多個字符。
+1

謝謝您的詳細解答@Wiktor –

0
echo "afghanistan : Afghanistan" | sed 's/\(.*\):\(.*\)/\2/' 
相關問題