[英]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.