python正则表达式来提取“ target = x”的第一个实例

时间:2019-05-29 06:54:57

标签: python regex

我有一行"blabla somehing something target = 4, hjieei, target = 8, abcd ef",我想要一个Python正则表达式为我提供输出4,这是第一个“ 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 个答案:

答案 0 :(得分:1)

当前.*正在贪婪地匹配所有内容,最终为您找到找到的最后一个匹配项,即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

答案 1 :(得分:0)

简单地:

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

输出:

4

答案 2 :(得分:0)

如果您确定字符串的开头始终有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]