你可以尝试使用以下正则表达式模式来匹配成员函数(不包含多行注释)并捕获最后的 )=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助手提供,问题来源于学员提问