我在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/

10-13 04:54
查看更多