Ваш код почти готов, за исключением извлечения совпавшей строки, вам нужно получить к нему доступ, используя .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 раз быстрее, чем поискпозади одного, но использует группу захвата.Эта ([^,]+)
часть следующего регулярного выражения захватывает имя, которое вас интересует.
^[^=]*=([^,]+)
Это в 20 раз быстрее, чем предыдущее
Проверьте этот код 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))
Prints,
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