正则表达式:如何删除每行上冒号之前的所有内容

时间:2017-07-31 11:05:57

标签: regex regex-lookarounds regex-greedy

我已尝试使用此正则表达式删除冒号之前的所有内容,但是,它会重复删除。

^[^:]+:\s*

以下需要从

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

Afghanistan
Albania
Algeria
Andorra
Angola

任何指针?

2 个答案:

答案 0 :(得分:0)

如果您想确保不跨行溢出,则需要将\r\n添加到否定字符类,并将\s替换为与\h相符的换行符(水平空白模式)(如果不支持[ \t],则为\h。)

所以,你可以使用

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

see demo)或

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

替换为空字符串(another demo)。

在Notepad ++ 中,您需要匹配整行以摆脱递归行为:

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

替换为\1。请参阅yet another regex demo

模式详情

  • ^ - 行的开头(如果不是默认值,则前缀为(?m)内联修饰符)
  • [^:\r\n]+ - 除:,CR和LF
  • 以外的1个或多个字符
  • : - 冒号
  • \h* - 零个或多个水平空格
  • (.*) - 第1组(在替换模式中称为\1$1)捕获除断行符之外的任何零个或多个字符,尽可能多(最多行尾)。

答案 1 :(得分:0)

echo "afghanistan : Afghanistan" | sed 's/\(.*\):\(.*\)/\2/'