例如,我有一个像:
这样的字符串 'blah blah 1.344 blah 1.455'
和列表如:
[2.888, 4.033]
我知道字符串和列表包含相同数量的数字,并希望使用正则表达式将字符串中的所有数字替换为列表中的数字。我想要这样的东西:
re.sub('\d\.\d+', list[i], line)
但不知道如何让每个匹配替换为列表中的下一个项目,而不仅仅是相同的项目。我想保留所有的文本和所有的空白完全相同,所以拆分到列表,替换索引和加入似乎不是我需要的东西。
答案 0 :(得分:4)
this post的第二个repl
参数可以是一个任意函数,它接受一个match
对象并返回一个字符串来替换它。在你的情况下:
>>> import re
>>> repl = [2.888, 4.033]
>>> re.sub(
r'\d\.\d+', # note raw string to avoid issues with backslashes
lambda match: str(repl.pop(0)), # replace each match with the next item in the list
'blah blah 1.344 blah 1.455'
)
'blah blah 2.888 blah 4.033'
答案 1 :(得分:3)
你可以这样做:
$json = json_decode($result, true);
if (is_array($json) && count($json)
&& is_array($json['products']) && count($json['products']))
{
foreach($json['products'] as $aProduct)
{
$id = $aProduct['id'];
$title = $aProduct['title'];
...
}
}
(我使用>>> re.sub('\d\.\d+', '{}', line).format(*list)
'blah blah 2.888 blah 4.033'
作为变量名称,因为在您使用它的问题中,覆盖list
关键字是一个非常糟糕的主意)
答案 2 :(得分:2)
def repl(matchobj):
return str(y.pop(0))
x='blah blah 1.344 blah 1.455'
y=[2.888, 4.033]
print re.sub(r"\d+\.\d+",repl,x)
您只需在re.sub