你可以尝试使用以下正则表达式模式来匹配成员函数(不包含多行注释)并捕获最后的 )=0; 部分:
import re
pattern = r"(?<!/\*)\s*(?:.+?\s+.+?\(.*?\).*?(?:;\s*|=\s*0;\s*))(?!.*\*/)"
text = """
virtual int queryDataBase1(const std::string serverUrl, std::string &result);
virtual int queryDataBase2(const std::string serverUrl, std::string &result) = 0;
"""
matches = re.findall(pattern, text)
print(matches) # 输出结果: [')= 0;']
在上述代码中,我们使用了一个正则表达式模式 (?!/\*)\s*(?:.+?\s+.+?\(.*?\).*?(?:;\s*|=\s*0;\s*))
(?<!/\*)使用否定回溯零宽断言(?!/\*)来确保不匹配多行注释的起始部分。\s*匹配任意数量的空格字符。(?:.+?\s+.+?\(.*?\).*?(?:;\s*|=\s*0;\s*))这个部分用于匹配成员函数定义。其中:.+?匹配非贪婪的一串字符,用来表示返回类型和函数名。\(.+?\)匹配括号内的参数列表。.*?匹配其他可能出现的任意字符(比如 const、throw 等)。(?:;\s*|=\s*0;\s*)使用非捕获分组(?:...)和管道符号|来表示两种可能的情况:;\s*匹配分号后可能存在的任意数量的空格字符。=\s*0;\s*匹配等于零和分号后可能存在的任意数量的空格字符。
这样,你就可以匹配包含 )=0; 的成员函数定义了。
内容由零声教学AI助手提供,问题来源于学员提问




