Python正则表达式模式定义,不包括字符

时间:2013-11-18 18:39:42

标签: python regex

我正在Java编写一个简单的Python源文件解析器。主要目标是提取方法声明列表。方法以public|private|protected开头(我假设没有friendly方法没有访问修饰符,这在我的代码库中是可接受的)并以{结尾但不能包含{{ 1}}(可以是多行)。

所以我当前的;模式如下:

regex

我不确定如何说整个匹配组不能包含((public|private|protected).*\n*.*?({|;)) 所以我试图说给我一些以;{结尾的内容,以先到者为准首先,不贪心。但是,这不起作用,这是一个失败的块:

;

您可以看到在方法声明之前有一个变量声明,它以private static final AtomicInteger refCount = new AtomicInteger(0); protected int getSomeVar() { 开头但没有private。所以这是作为一个匹配返回的,我希望将它作为两个匹配,然后我将在单独的非正则表达式逻辑中丢弃变量声明。但是,如果您知道如何在{之前排除;,那也可以。

基本上,我如何在Python正则表达式中告诉主模式中不能出现某个字符(或子模式)?

2 个答案:

答案 0 :(得分:2)

您可以使用否定字符类来表示“除(换行符或左括号或分号)之外的任何字符”。

((public|private|protected)[^;{]*\n*[^;{]*?({|;))

答案 1 :(得分:1)

这终于奏效了:

((public|private|protected)[^;{]*?{)

请注意我必须指定在第一个{{/ p>}之前排除;{