正则表达式匹配评论中的标签

时间:2009-09-15 15:02:03

标签: .net regex comments

我希望获得一个与java注释中的标记匹配的正则表达式,这样我就可以用.net注释替换它。

例如我有这个:

/**
* Some method description
* 
* @param paramName Parameter description
*         which may span more than 1 line
* @return return value.
* @throws ExceptionName some exception description
*           again may span more than 1 line.
*/

我希望最终得到这个:

///
/// Some method description
/// 
/// <param name="paramName"> Parameter description
///         which may span more than 1 line</param>
/// <returns> return value.</returns>
/// <exception cref="ExceptionName"> some exception description
///           again may span more than 1 line.</exception>
///

我不确定的部分是处理匹配@tag以及之后可能的名称以及如何匹配尖括号之间的内部文本的最佳方法。

任何想法都赞赏。

1 个答案:

答案 0 :(得分:1)

单个正则表达式并不是最好的方法,因为你没有对@param和@throws与@return做同样的事情。用Perl或Python编写脚本会使这项任务变得更加容易。

话虽这么说,这些应该让你顺利...(所有这些都是Python的语法)这个:

(?i)(?s)(/\*\*.*?\*/) 

将获得整个评论。这个:

^(/\*\*|\*/|\*)(.*)$
替换为/// \ 2将使用.Net评论转换所有评论明星。

(?i)(?s)(^([^@]+)@param (\b.*\b)(.*?)(?!\* @return) 

替换为

(\1<param name="\2">\3</param>) 

应该修复param部分。同样,

(?i)(?s)(^([^@]+)@throws (\b.*\b)(.*?)(?!\*/) 

替换为

(\1<exception cref="\2">\3</param>) 

应该修复投掷部分。最后,

@return (.*)

替换为\ 1应修复@return。 (注意,这一个未设置为多行[星号与EOL字符不匹配])

这都需要插入脚本(或者在您选择的编辑器中一个接一个地运行)。

请注意,这些不会试图解释@pram,@return,@throw部分中的任何流星。