如果存在特定字符集,则编写正则表达式以跳过一行?

时间:2011-10-05 19:09:54

标签: python regex

我正在尝试在python中编写一个正则表达式来解析一个包含这样内容的文件: -

static const PropertyID PROPERTY_X = 10225;
//static const PropertyID PROPERTY_Y = 10226;
   //static const PropertyID PROPERTY_Z = 10227;

我想仅为非注释属性提取属性名称和编号。 这是我写的表达

tuples = re.findall(r"[^/]*static[ \t]*const[ \t]*PropertyID[ \t]*(\w+)[ \t]*=[ \t]*(\d+).*",fileContents)

其中fileContents将文件数据作为字符串。

但是这个正则表达式甚至匹配注释(带//行)。 如何避免匹配注释行。

3 个答案:

答案 0 :(得分:2)

尝试:

r"(?m)^(?!//)static\s+const\s+PropertyID\s+(\S+)\s+=\s+(\d+);"

几个笔记。

^匹配行的开头

(?!//)是一个负向前瞻,声称它后面没有//

\ s是任何空格字符

\ S是任何非空格字符

答案 1 :(得分:1)

你可以指定,在行开头之后,你只需要在第一个static之前的空格:

tuples = re.findall(r"^\s*static[ \t]*const[ \t]*PropertyID[ \t]*(\w+)[ \t]*=[ \t]*(\d+).*",fileContents)

答案 2 :(得分:0)

如果您正在解析C代码,则可以使用pycparser之类的内容。 正则表达式不适合(或不可能)解析任何编程语言。

或者,我认为这段代码对你正在做的事情更简单:

import re
string = "   //static const PropertyID PROPERTY_Z = 10227;"
results = re.split("\s*",string)
#results = ['//static', 'const', 'PropertyID', 'PROPERTY_Z', '=', '10227;']

if results[0].startswith("\\") or results[0].startswith("/*"):
    pass
相关问题