我在Java
中编写一个简单的Python
源文件解析器。主要目的是提取方法声明的列表。方法以public|private|protected
开头(我假设没有friendly
方法没有访问修饰符,这在我的代码库中是可以接受的),并且以{
结尾,但不能包含;
(可以是多行) )。
所以我当前的regex
模式如下所示:
((public|private|protected).*\n*.*?({|;))
我不确定怎么说整个比赛组都不能包含
;
,所以我想说的是给我一些以{
或;
结尾的东西,以非贪婪为准。但是,这不起作用,这是一个失败的块:private static final AtomicInteger refCount = new AtomicInteger(0);
protected int getSomeVar() {
您可以看到在方法声明之前有一个变量声明,该声明以
private
开头,但没有{
。因此,这作为一个匹配项返回,而我想将其作为两个匹配项,那么我将在单独的非正则表达式逻辑中丢弃变量声明。但是,如果您知道如何在;
之前排除{
,那也可以。本质上,如何在Python正则表达式中告诉我主模式中一定不能出现某个字符(或子模式)?
最佳答案
您可以使用否定的字符类来表示“除(换行符或)左花括号或分号外的任何字符”。
((public|private|protected)[^;{]*\n*[^;{]*?({|;))
关于python - Python正则表达式模式定义(不包含字符),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20055275/