我有多个包含LDAP条目的日志文件,并且我试图只匹配在特定日期具有createtimestamp的条目,但捕获整个条目,而不仅仅是时间戳。条目如下:
dn: ....
otherattr:
...
createtimestamp: 20130621061525Z问题是,我也得到了在我想要的条目之前的所有条目。
dn: ....
otherattr:
...
createtimestamp: 20121221082545Z
dn: ....
otherattr:
...
createtimestamp: 20130621061525Z这是表达式:
dn_search = re.compile(r'dn: (.*?)createtimestamp: 20130[4-6]\d+?Z', flags=re.M|re.S)我尝试了一些其他表达式,但我只能得到createtimestamp或不需要的条目。有什么想法吗?
发布于 2013-06-24 04:53:40
描述
此正则表达式将假定每组文本以dn:开头,以空行结束。然后,它将捕获整个行组,并捕获createtimestamp字段的值
^dn:(?=(?:(?!^createtimestamp:|^dn:|^\s*(?:\r|\n\|$)|\Z).)*^createtimestamp:\s*([^\s\r\n]*))(?:(?!^dn:|^\s*(?:\r|\n\|$)|\Z).)*

Python代码示例
链接到工作示例http://repl.it/J0t
代码
import re
string = """dn: ....
otherattr:
...
createtimestamp: 20121221082545Z_1
dn: ....
otherattr:
...
createtimestamp: 20130621061525Z_2
""";
for matchObj in re.finditer( r'^dn:(?=(?:(?!^createtimestamp:|^dn:|^\s*(?:\r|\n\|$)|\Z).)*^createtimestamp:\s*([^\s\r\n]*))(?:(?!^dn:|^\s*(?:\r|\n\|$)|\Z).)*', string, re.M|re.I|re.S):
print "-------"
print "matchObj.group(1) : ", matchObj.group(1)返回
-------
matchObj.group(1) : 20121221082545Z_1
-------
matchObj.group(1) : 20130621061525Z_2发布于 2013-06-24 06:36:51
不要试图手动解析LDIF。这并不复杂,但是像属性和名称转义,以及用于长行的行续写之类的东西会让您感到头疼。使用the LDIF parser from python-ldap。
https://stackoverflow.com/questions/17264698
复制相似问题