正则表达式从行的开头删除/*...*/注释

时间:2011-11-04 09:30:53

标签: regex

我有一些这种类型的文件:

/*  78 */     Lorem ipsum dolor sit amet   
/*  79 */     Lorem ipsum dolor sit amet   
/*  eb */     Lorem ipsum dolor sit amet   
/*  HG */     Lorem ipsum dolor sit amet   
/*     */     Lorem ipsum dolor sit amet  
/*  83 */     Lorem ipsum dolor sit amet   
/*  84 */     Lorem ipsum dolor sit amet  
/*     */ 
/*     */     Lorem ipsum dolor sit amet  
/*  ZX */     Lorem ipsum dolor sit amet  
/*     */     Lorem ipsum dolor sit amet  
/*     */     Lorem ipsum dolor sit amet  
/*  90 */     Lorem ipsum dolor sit amet  
/*  91 */     Lorem ipsum dolor sit amet  
/*  92 */     Lorem ipsum dolor sit amet  

我想消除

/*    */ 
/* 10 */ 

带有正则表达式的部分文本,我的正则表达式如下:

[/*(0-9)*/]

但它无法正常工作,它删除了一些包含数字的文本

6 个答案:

答案 0 :(得分:4)

[]内的所有内容都称为character class,它始终只匹配一个字符。

在角色类中,正常的正则表达式元字符,如*(),会失去它们的特殊权力。因此[*]只匹配文字'*'

在您的情况下,[/*(0-9)*/]将匹配以下字符之一:'/''*''('')''/'或任何(ASCII)数字。

您正在寻找的是正则表达式:

(?m)^/\*[\s0-9]*\*/

匹配"/*"后跟零个或多个空格字符(\s)或数字(0-9),以"*/"结尾。 ^匹配输入的开头,并在其前面添加(?m)使其与行的开头匹配。

所以它匹配你的例子中的所有多行注释,除了这些:

/*  eb */
/*  HG */
/*  ZX */

答案 1 :(得分:1)

试试这个表达

/^\/\*[0-9\s]*\*\//

如果您还要删除/* AH */

,请使用此表达式
/^\/\*[\w\s]*\*\//

答案 2 :(得分:1)

尝试使用此选项,它与开启和关闭/ *和* /匹配,其中包含一些文本。

/^\/\*.*?\*\//

答案 3 :(得分:1)

尝试使用以下regexp:

/\/\*.*?\*\//

答案 4 :(得分:1)

试试这个正则表达式

\/\*.*?\*\/\s+

\/\*匹配起始/*

.*?匹配任意数量的文字,而不是贪婪

\*\/与结尾*/

匹配

\s+匹配任意数量的空格字符(可选)

答案 5 :(得分:1)

如果您使用的是Linux(或可以访问它),则可以不使用正则表达式:

cut -b 10- <INPUTFILE>

或者如果条纹是固定宽度并且在线的开始处,例如, sed

sed '/^.\{10\}//' <INPUTFILE>

或使用awk(如果一行只有两个/

awk '{ print gensub(".*/","",1,$0) }'

HTH