#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