Обычно \K
не используется в поиске назад, поскольку его значение состоит в том, чтобы обеспечить успешное совпадение в текущей позиции, и обычно не требуется, чтобы поиск назад был частью текущего совпадения. Поэтому я не знаю, почему вы используете ретроспективы переменной длины, для которых для начала требуется пакет regex
. Тем не менее, у меня не было проблем с сопоставлением 'comm="nom-http"'
с вашим регулярным выражением:
>>> pattern = (r'(?x)((?<=\Kauid=)|(?<=\Kcomm="nom))[\S]+')
... comm = 'comm="nom-http"'
... regex.search(pattern, comm)
<regex.Match object; span=(0, 15), match='comm="nom-http"'>
Обратите внимание, что comm="nom
является частью совпадения из-за наличия \K
в регулярном выражении.
Но проще было бы использовать:
pattern = r'((?:auid=|comm="nom)\S+)'
Итак, в чем проблема? Когда вы говорите: «Он возвращает только первое», вы имеете в виду не шаблон, а первое вхождение в строке, потому что может быть несколько вхождений? Если это так, то вместо выполнения regex.search
выполните команду regex.findall
, которая вернет список совпадений строка .
import re
pattern = r'((?:auid=|comm="nom)\S+)'
matches = re.findall(pattern, line)