Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 正则表达式匹配完整、任意长度、全类型的LDAP名称_Python_Regex_Ldap - Fatal编程技术网

Python 正则表达式匹配完整、任意长度、全类型的LDAP名称

Python 正则表达式匹配完整、任意长度、全类型的LDAP名称,python,regex,ldap,Python,Regex,Ldap,我正在尝试使用Python 3.4.0从日志文件中提取类型完整的LDAP FDN(检查每一行是否匹配)。但是,我尝试的正则表达式模式都不起作用。我需要能够找到完整的FDN,而不考虑FDN的第一个元素的类型(例如DC、OU、CN) 我可以找到FDN的每个元素并自己连接它们。我最接近的是这个,它几乎可以找到字符串中的每个单词: >>> ldappattern = re.compile("cn=[\w-]+,|ou=[\w-]+,|dc=[\w-]+,", re.IGNORECASE

我正在尝试使用Python 3.4.0从日志文件中提取类型完整的LDAP FDN(检查每一行是否匹配)。但是,我尝试的正则表达式模式都不起作用。我需要能够找到完整的FDN,而不考虑FDN的第一个元素的类型(例如DC、OU、CN)

我可以找到FDN的每个元素并自己连接它们。我最接近的是这个,它几乎可以找到字符串中的每个单词:

>>> ldappattern = re.compile("cn=[\w-]+,|ou=[\w-]+,|dc=[\w-]+,", re.IGNORECASE)
>>> re.findall(ldappattern, log_line1)
['This', 'server', 'name', 'is', 'CN=Server001,', 'OU=SomeOU,', 'DC=MyDom,', 'DC=org']
请注意,这些LDAP名称可以包含空格,因此空格搜索是非常无用的,并且我不能保证最后一个元素是合理的(例如,我看到
'DC=testcompany,DC=internal'
作为域的根元素,甚至是域的单标签DNS名称)。它们应该在引号中,但它们不一定是给定行中引用的唯一内容


有什么想法吗?

如果我理解您的意思,您希望在字符串中捕获每个元素的名称和值,例如:

CN=Server001,OU=SomeOU,DC=MyDom,DC=org
下面的正则表达式是一种方法。请注意,结尾逗号必须是可选的(最好在它前面添加一个单词边界),否则您将错过最后一个元素:

(cn|ou|dc)=([\w-]+)\b,?

每个项目的名称在捕获组1中,值在组2中。正如您所知,它需要ignorecase标志

请注意,这些LDAP名称可以包含空格,因此空格搜索非常无用


我不明白。您发布的演示输入不包含空格。

我建议您始终绘制正则表达式字符串,以避免出现任何意外情况。也就是说,我会建议这个正则表达式:

(?:cn|ou|dc)=[^,"]+

我对正则表达式字符串使用了单引号,这样就不必转义正则表达式中的双引号

(?:cn | ou | dc)
匹配任何
cn
ou
dc


[^,“]+
匹配除
之外的任何字符关于空格:
CN=Server001,OU=Some OU,DC=MyDom,DC=org
也有效。但是,
re.findall(((cn | ou | dc)=([\w\s-]+)\b,”,log\u line1)
返回一个元组列表:
[('cn','Server001'),('ou','Some ou'),…]
,对于我的目的来说,它工作得很好。也许有一个更有效的答案,我希望有人能想出它,但我可以继续。只要将字符类从
[\w-]
更改为
[-\w]
,你就应该很好了。“rawing”是什么意思?@aliteralmind这意味着你不必双重转义。假设您要匹配一个反斜杠。您需要
'\\\'
来匹配单个反斜杠。通过绘制字符串,可以使用
'\\'
匹配单个反斜杠。看见
(?:cn|ou|dc)=[^,"]+