我有一行"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
答案 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]