Как получить первое целое число между двумя конкретными символами с регулярным выражением в Python? - PullRequest
1 голос
/ 03 апреля 2019

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

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

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

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

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

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

 output = '22'

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

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

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

1 Ответ

2 голосов
/ 03 апреля 2019

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

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

См. Демонстрацию regex со строкой 1 и другую демонстрацию со строкой 2 .

информация

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

См. Демоверсию Python :

import re
strs = ["asdasdasd\\size\\x22:\x0A23232d:123123123\x0A2", "asdasdasd\\\size\\x22:22\x0A23232d:123123123\x0A2"]
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
...