Извлечь всю строку справа от разделителя из многострочной строки после совпадения - PullRequest
0 голосов
/ 26 февраля 2019

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

import re
s = '''jaguar.vintage.aircards = 2
jaguar.vintage.hw.sdb.size = 512.1 GB
jaguar.vintage.hw.tm.firmware = SWI9X15C_05.05.16.02 r21040 carmd-fwbuild1 2014/03/17 23:49:48
jaguar.vintage.hw.tm.hardware = 1.0
jaguar.vintage.hw.tm.iccid = 8901260591783960689
jaguar.vintage.hw.tm.imei = 359225051166726
jaguar.vintage.hw.tm.imsi = 310260598396068
jaguar.vintage.hw.tm.model = MC7354
jaguar.vintage.hw.wifi1.mac = 00:30:1a:4e:06:7a
jaguar.vintage.hw.wifi2.mac = 00:30:1a:4e:06:79
jaguar.vintage.part = P34110-002
jaguar.vintage.product = P34101
jaguar.vintage.psoc = 0.1.16
jaguar.vintage.serial = 34110002T0021
jaguar.vintage.slavepsoc1 = 0.1.5
jaguar.vintage.sw.app.release = 4.0.0.41387-201902131138git367fbda8e
'''
# print(s)
# release = (s.split('jaguar.vintage.sw.app.release =')[1]).strip()
# print(release)
#part_number = jaguar.vintage.part = P34110-002
pnumsrch = r"jaguar.vintage.part =.*?(?=\w)(\w+)"
part_number = re.findall(pnumsrch, s)
print(part_number[0])

# release_number = jaguar.vintage.sw.app.release = 4.0.0.41387-201902131138git367fbda8e
relnumsrch = r"jaguar.vintage.sw.app.release =.*?(?=\w)(\w+)"
rel_number = re.findall(relnumsrch, s)
print(rel_number[0])

Факт:
P34110
4

Ожидаемый:
P34110-002
4.0.0.41387-201902131138git367fbda8e

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Поскольку . не соответствует символу новой строки по умолчанию, вы можете просто использовать .* для соответствия остальной части строки:

pnumsrch = r"jaguar.vintage.part = (.*)"

и:

relnumsrch = r"jaguar.vintage.sw.app.release = (.*)"
0 голосов
/ 26 февраля 2019

Просто поймайте все, что не является новой строкой Демо :

pat = re.compile(r'jaguar\.vintage\.part = ([^\n]+)')
pat2 = re.compile(r'jaguar\.vintage\.sw\.app\.release = ([^\n]+)')

>>> pat.findall(s)

['P34110-002']
>>> pat2.findall(s)

['4.0.0.41387-201902131138git367fbda8e']

Вы также должны избегать своих периодов в своем паттерне.

Как упомянуто @ WiktorStribiżew, просто . достаточно для [^\n] порции :

pat = re.compile(r'jaguar\.vintage\.part = (.+)')
pat2 = re.compile(r'jaguar\.vintage\.sw\.app\.release = (.+)')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...