результат в группе между двумя группами без захвата - PullRequest
0 голосов
/ 20 июня 2020

Я пытаюсь уловить закономерность между двумя группами без захвата в основной группе. Как я могу это сделать?

здесь это часть моего регулярного выражения: (? P (?: Alias ​​\ s +? Name.). *? (?: \ N))

part моего текста: Псевдоним: Компания root ca \ n

правильный вывод: Компания root ca

Итак, кто может мне объяснить, почему это не работает?

ps обязательным условием для меня является использование re.compile с re.S. Маленький битовый код для отображения:

regex = re.compile(r'(?P<alias>(?:Alias name).*?)(?:\n).*?'
                   r'(?P<entry>(?:Entry type).*?)(?:\n).*?'
                   r'(?P<Owner>(?:Owner).*?)(?:\n).*?'
                   r'(?P<Valid>(?:Valid from).*?[A-Z]{3}\s+?\d+).*?'
                   r'(?P<untin>(?:until).*?[A-Z]{3}\s+?\d+)', re.S)
for k in regex.finditer(text):
    f = k.groupdict()
    f['TimeStamp'] = datetime.datetime.now().strftime('%d.%m.%Y %H:%M')
    f[jksfile] = jksfile
    print(f)  # eventually it will be dictionary

пример полного регулярного выражения: https://regex101.com/r/IGjPaE/2

Ребята, любая помощь .....

Ответы [ 2 ]

0 голосов
/ 20 июня 2020

Вот что вы можете сделать:

import re

t = "Alias name: Company root ca\n"

print(re.findall('(?<=Alias name: ).*',t))

Вывод:

Company root ca
0 голосов
/ 20 июня 2020
import re
st = 'Alias name: Company root ca\n'
f = re.findall(':(.*)',st)

Приведенный выше код будет работать нормально, не нужно усложнять. Изменить: вам нужно только выражение ':(.*)' для данных, которые вам нужны в данной строке, если есть несколько похожих случаев данных, вы можете использовать какой-то вложенный re search, сначала извлеките основную строку и затем более конкретный c один

...