如何修改Python re正则,排除匹配带@Override注解的存储过程及函数
两种方案都可以实现需求,你可以根据自己的场景选择:
方案1:直接修改现有正则实现
在原有正则开头添加负向零宽断言即可,Python 3.7及以上版本支持不定长负回顾断言,修改后的正则如下:
methodRegex = r"^\s*(?<!@Override\s*\n\s*)((FUNCTION|PROCEDURE)\s+(\w+))(.*?)BEGIN(.*?)^END\s*(\w+);"
这个正则会在匹配阶段直接跳过前面带有@Override注解的存储过程和函数,后续处理逻辑不需要做任何修改。
方案2:不改正则,在匹配结果中过滤
这种方案兼容性更强,逻辑简单不易出错,只需要在遍历匹配结果时增加一行判断即可,修改后的代码如下:
methodRegex = r"^\s*((FUNCTION|PROCEDURE)\s+(\w+))(.*?)BEGIN(.*?)^END\s*(\w+);" methodMatches = re.finditer(methodRegex, fContent, re.DOTALL | re.MULTILINE | re.IGNORECASE | re.VERBOSE) for methodMatchNum, methodMatch in enumerate(methodMatches, start=1): methodContent=methodMatch.group() # 过滤带@Override注解的方法 if '@Override' in methodContent: continue methodNameFull=methodMatch.group(1) methodType=methodMatch.group(2) methodName=methodMatch.group(3) # 原有后续业务逻辑
如果没有特殊的性能要求,更推荐用第二种方案,维护成本更低。
内容的提问来源于stack exchange,提问作者jayz
相关产品推荐
相关产品推荐

