регулярное выражение Python, чтобы подобрать первый экземпляр "target = x" - PullRequest
0 голосов
/ 29 мая 2019

У меня есть строка "blabla somehing something target = 4, hjieei, target = 8, abcd ef", я хочу иметь регулярное выражение Python, чтобы получить вывод 4, который является числом после 1-го "target =".

Я пробовал re.search('.*target = ([0-9.]+)’, line), это всегда дает мне значение 8 (не 4).Я попробовал приведенный ниже код, и он также не работает.Не могли бы вы помочь.

line = "target = 4, hjieei, target = 8, abcd ef"
while line:
    target_1 = re.search('/[^target = ([0-9.]+)]*/)', line)
    if target_1 and target_1.groups():
        print("found: ", target_1.group(1))'
    break

Ответы [ 3 ]

1 голос
/ 29 мая 2019

В настоящее время .* сопоставляет все жадно и в итоге дает вам последнее найденное совпадение, которое равно 8.

Так что вы захотите изменить свое регулярное выражение, чтобы начать сопоставление с самого начала, сделавон не жадный, используя .*?, abd, тогда он вернет вам первое совпадение.

import re
line = "blabla somehing something target = 4, hjieei, target = 8, abcd ef"

target_1 = re.match(r'.*?target = ([0-9.]+)', line)
print(target_1.group(1))

Вывод будет 4

0 голосов
/ 29 мая 2019

Если вы уверены, что в начале вашей строки всегда есть target = [number], вы можете сделать:

import re
txt = "target = 4, hjieei, target = 8, abcd ef"
number = re.findall(r'^target = (\d+)',txt)[0]
print(number) #prints 4

Обратите внимание на использование необработанной строки (r до '), поэтому я могу использовать один \ без необходимости экранирования и \d, что эквивалентно [0-9]

0 голосов
/ 29 мая 2019

Просто:

import re
data = "Batch size = 4, hjieei, Batch size = 8, abcd ef"
out = re.findall('\d', data)[0]

Вывод:

4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...