以下是Active Directory组专有名称。我想从DN的其余部分中分离出最左边的名称,如下所示:
CN = CTX_APP_Bytemobile_UPM,OU = EEGroups,OU = EEOU,DC = ssa,DC = oam,DC = uk,DC = tmo = CTX_APP_Bytemobile_UPM
CN = OSGRP_IP_Transport,OU = EEGroups,OU = EEOU,DC = ssa,DC = oam,DC = uk,DC = tmo = OSGRP_IP_Transport
CN =远程桌面用户,CN =内置,DC = ssa,DC = oam,DC = uk,DC = tmo = 远程桌面用户
到目前为止,我所拥有的RegEx只匹配'_'字符串。我的RegEx是:
(?<=CN=)\w*
我还试图弄清楚如何在Python中使用're'模块。目前,我的命令是:
presplit = "CN=CTX_APP_Bytemobile_UPM,OU=EEGroups,OU=EEOU,DC=ssa,DC=oam,DC=uk,DC=tmo"
x = re.search("(?<=CN=)\w*", presplit)
print(x) >>> *returns* <re.Match object; span=(3,15), match='CTX_APP_Bytemobile'>
我想将匹配项作为新字符串获取。
谢谢。
答案 0 :(得分:2)
似乎您无需正则表达式就可以执行此操作,而只需使用str.split
。例如:
s = 'CN=CTX_APP_Bytemobile_UPM,OU=EEGroups,OU=EEOU,DC=ssa,DC=oam,DC=uk,DC=tmo'
result = s.split(',')[0].split('=')[1]
print(result)
# CTX_APP_Bytemobile_UPM
答案 1 :(得分:1)
除了提取匹配的字符串外,您的代码几乎全部存在,您需要使用.group()
进行访问以进行完全匹配。以下是修改后的代码,
import re
presplit = "CN=CTX_APP_Bytemobile_UPM,OU=EEGroups,OU=EEOU,DC=ssa,DC=oam,DC=uk,DC=tmo"
x = re.search("(?<=^CN=)\w+(?:\s+\w+)*", presplit)
if(x):
print(x.group())
按照您的预期打印以下内容,
CTX_APP_Bytemobile_UPM
此外,要捕获空间,还需要使用此正则表达式,
(?<=^CN=)\w+(?:\s+\w+)*
^^^^^^^^^^^ This additional part enables it to optionally capture space followed by some word characters
如果您注意到,我将^
放在CN=
前面,以积极的眼光看待它,因此它与字符串中间的其他CN=
仅匹配CN
在行首。
除了对正则表达式的正面评价外,您还可以使用另一个简单的正则表达式,它比在正则表达式后面落后快近20倍,但使用捕获组。正则表达式后面的([^,]+)
部分捕获了您感兴趣的名称。
^[^=]*=([^,]+)
This one is 20 times faster than earlier one
查看此Python代码,
import re
arr=['CN=CTX_APP_Bytemobile_UPM,OU=EEGroups,OU=EEOU,DC=ssa,DC=oam,DC=uk,DC=tmo = CTX_APP_Bytemobile_UPM','CN=OSGRP_IP_Transport,OU=EEGroups,OU=EEOU,DC=ssa,DC=oam,DC=uk,DC=tmo = OSGRP_IP_Transport','CN=Remote Desktop Users,CN=Builtin,DC=ssa,DC=oam,DC=uk,DC=tmo']
for s in arr:
m = re.search(r'^[^=]*=([^,]+)', s)
if (m):
print(s,'-->',m.group(1))
打印
CN=CTX_APP_Bytemobile_UPM,OU=EEGroups,OU=EEOU,DC=ssa,DC=oam,DC=uk,DC=tmo = CTX_APP_Bytemobile_UPM --> CTX_APP_Bytemobile_UPM
CN=OSGRP_IP_Transport,OU=EEGroups,OU=EEOU,DC=ssa,DC=oam,DC=uk,DC=tmo = OSGRP_IP_Transport --> OSGRP_IP_Transport
CN=Remote Desktop Users,CN=Builtin,DC=ssa,DC=oam,DC=uk,DC=tmo --> Remote Desktop Users
答案 2 :(得分:1)
尝试:x = re.search("(?<=CN=)[\w\s]*", presplit)
答案 3 :(得分:1)
如果只想等于逗号后的内容,就可以在逗号上分割,请将变量设置为等号加1的位置,并读取到末尾。
presplit = "CN=CTX_APP_Bytemobile_UPM,OU=EEGroups,OU=EEOU,DC=ssa,DC=oam,DC=uk,DC=tmo"
#Make a list of strings split on the comma
lst = presplit.split(",")
#Iterate through the list
for i in lst:
#Set the starting position to where the equal sign is plus one
strt = re.search("=", i).start()+1
#Get the string from the character after the equal sign to the end of the string
print(i[strt:])