首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LDAP条目与多行正则表达式匹配时出现问题

LDAP条目与多行正则表达式匹配时出现问题
EN

Stack Overflow用户
提问于 2013-06-24 03:54:00
回答 2查看 379关注 0票数 2

我有多个包含LDAP条目的日志文件,并且我试图只匹配在特定日期具有createtimestamp的条目,但捕获整个条目,而不仅仅是时间戳。条目如下:

代码语言:javascript
复制
dn: ....
otherattr: 
...
createtimestamp: 20130621061525Z

问题是,我也得到了在我想要的条目之前的所有条目。

代码语言:javascript
复制
dn: ....
otherattr: 
...
createtimestamp: 20121221082545Z

dn: ....
otherattr: 
...
createtimestamp: 20130621061525Z

这是表达式:

代码语言:javascript
复制
dn_search = re.compile(r'dn: (.*?)createtimestamp: 20130[4-6]\d+?Z', flags=re.M|re.S)

我尝试了一些其他表达式,但我只能得到createtimestamp或不需要的条目。有什么想法吗?

EN

回答 2

Stack Overflow用户

发布于 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

代码

代码语言:javascript
复制
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)

返回

代码语言:javascript
复制
-------
matchObj.group(1) :  20121221082545Z_1
-------
matchObj.group(1) :  20130621061525Z_2
票数 2
EN

Stack Overflow用户

发布于 2013-06-24 06:36:51

不要试图手动解析LDIF。这并不复杂,但是像属性和名称转义,以及用于长行的行续写之类的东西会让您感到头疼。使用the LDIF parser from python-ldap

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17264698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档