Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python正则表达式来获取第一个实例";目标=x";_Python_Regex - Fatal编程技术网

python正则表达式来获取第一个实例";目标=x";

python正则表达式来获取第一个实例";目标=x";,python,regex,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:

我有一行
“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

目前,
*
正在贪婪地匹配所有内容,并最终为您提供找到的最后一个匹配项,即
8

因此,您希望通过使用
*?
,将正则表达式更改为非贪婪,从而从头开始匹配,然后它将为您返回第一个匹配项

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

简单地说:

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

4

如果您确定字符串开头总是有
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-9.]+)
谢谢Wiktor。在我发表文章之前,我已经尝试过重新搜索('Batch size=([0-9.]+),第行),它在我的实验环境(即我的本地pycharm IDE)上给了我4的值,但在我的实际服务器环境中,几个复杂的文件一起工作,什么都不会返回,所以我正在寻找一个更健壮的解决方案:)如果你需要一个真实的答案,发布真实的需求,一些具有预期输出的真实示例文本。因此不确定字符串是否以批处理大小开始?Wiktor的建议和我下面的答案适用于要求。根据答案,您需要提供更多示例以更好地阐明要求Hanks Wiktor,现在发布解决方案。是否
re.findall('\d',data)[0]
查找第一位数字而不是数字?非常感谢Daweo,这很好,虽然它不适合我的代码的其他部分,但在其他一些情况下,它是有效的。@AndrewYang:现在我注意到您还允许在数字中使用点(
),为了考虑到这一点,我的
findall
的第一个参数应该改为
r'^Batch size=([\d.]+)