Как получить первое целое число между двумя конкретными символами с помощью регулярного выражения в Python?

#python #regex #string #split #logfile

#python #регулярное выражение #строка #разделение #файл журнала

Вопрос:

Я анализирую некоторые файлы журнала и мне нужно извлечь целое число для параметра «размер».

Строка (ее часть) выглядит следующим образом

  "asdasdasd\size\x22:22x0A23232d:123123123x0A2"  
  

Я хочу получить первое целое число между «:» и «». Это было бы 22. Не 123123123.

Я попробовал следующий код

  p = re.compile("[:](d )[D]")
 s = "asdasdasd\size\x22:22x0A23232d:123123123x0A2"
 p.findall(s)[0]

 output = '22'
  

Однако, если между первыми появлениями «:» и «» нет числа, и вы хотите, чтобы код возвращал None или 0. Прямо сейчас код вернет ‘123123123’, если шаблон выглядит следующим образом:

 "asdasdasd\size\x22:x0A23232d:123123123x0A2"
  

Какой был бы лучший способ добиться этого?

Ответ №1:

Вы можете использовать re.search со следующим шаблоном:

 p = re.compile(r"^[^:]*:(d )")
  

Смотрите демонстрацию регулярных выражений со строкой 1 и другую демонстрацию со строкой 2.

Подробные сведения

  • ^ — начало строки
  • [^:]* — 0 символов, отличных от :
  • : — a -
  • (d ) — Группа захвата 1: одна или несколько цифр

Смотрите демонстрацию Python:

 import re
strs = ["asdasdasd\size\x22:x0A23232d:123123123x0A2", "asdasdasd\size\x22:22x0A23232d:123123123x0A2"]
p = re.compile(r"^[^:]*:(d )")
for s in strs:
    result = ""
    m = p.search(s)
    if m:
        result = m.group(1)
    else:
        result = None
    print(result)
  

Вывод:

 None
22