繁体   English   中英

正则表达式匹配特定方法的javadoc注释(python)

[英]Regex matching javadoc comment for a specific method (python)

我在编写一个与特定java方法的javadoc注释内容相匹配的正则表达式时遇到了麻烦。 例:

/**
 * Do not match this.
 */

/**
 * Do match this.
 */
@SomeAnnotation
public boolean methodX() { }
/**
 * Do not match this.
 */

我已经知道方法签名,所以我可以在正则表达式中使用它。

我可以使用以下命令匹配所有javadoc注释:

/\*\*(.*?)\*/

我也指定re.DOTALL。 我尝试扩展正则表达式以使用负面预测,表示我只想要一个javadoc注释,如果它是立即继续该方法的注释:

/\*\*(.*?)\*/(?!.*?/\*\*.*?public boolean methodX\(\))

但这导致(。*?)将第一个javadoc注释开头的内容与javadoc注释的结尾匹配,立即执行methodX。

我一直在尝试各种方法来构建积极和消极的前瞻,但没有任何工作。 我错过了什么?

这与名为group的comment给定示例文本中的函数前面的注释(从/***/ )匹配:

(?P<comment>/\*\*(?:(?!/\*\*).)*?\*/)(?:(?:(?!\*/).)*?)(?=public boolean methodX)

请参阅regex101.com上测试

  • 这里的关键是使用(?!/\\*\\*).)*?忽略所需文本中的额外/***/ (?!/\\*\\*).)*? (?!\\*/).)*?

  • ?: s是要从结果中刮掉那些无趣的群体

你的表情是贪婪的,目前匹配*/在第一个注释(因为.*匹配*/ )。 尝试使用

/\*\*((?:[^*]+|\*[^/])*)\*/

这样可以确保您永远不会匹配结尾*/ ,最终会同时匹配两条评论

编辑:此代码避免了包含* /的注释问题。 不确定他们为什么会,但这里说:

/\*\*((?:(?!\*/).)*)\*/(?:(?!/\*\*).)*(?=public boolean methodX)

看看这个例子,确认它有效: http//regex101.com/r/yV9oK2/2我从原来的匹配切换到负向前瞻,以避免“灾难性的回溯”,正如测试程序所说的那样:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM