Python - манипулировать строкой с помощью RegEx - PullRequest
0 голосов
/ 01 марта 2019

Ниже перечислены отличительные имена группы 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*

Я также пытаюсь понять, как использовать модуль 're' в Python.В настоящее время моя команда:

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'>

Я хочу получить совпадение в виде новой строки.

Заранее спасибо.

Ответы [ 4 ]

0 голосов
/ 01 марта 2019

Если вы просто хотите, чтобы то, что после числа равно запятой, вы могли бы просто разделить на запятую, установите переменную в положение знака равенства плюс один и прочитайте ее до конца.

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:])
0 голосов
/ 01 марта 2019

Попробуйте: x = re.search("(?<=CN=)[\w\s]*", presplit)

0 голосов
/ 01 марта 2019

Похоже, что вы могли бы сделать это без регулярных выражений и просто использовать 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
0 голосов
/ 01 марта 2019

Ваш код почти готов, за исключением извлечения совпавшей строки, вам нужно получить к нему доступ, используя .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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...