您不仅需要找到item这个词,还可以在正则表达式中包含以下数字,并将整个内容替换为item = 10。
\s+ 在正则表达式中匹配一个或多个空白字符,如果您希望空格是可选的,您可以使用\s*,它匹配零个或多个 空白字符。
>>> l = ['data_1 = 3', 're = 3', 'item = 5']
>>> import re
>>> r = re.compile(r'item\s*=\s*\d+')
>>> updated_l = [r.sub('item = 10', s) if r.match(s) else s for s in l]
>>> print(updated_l)
['data_1 = 3', 're = 3', 'item = 10']
编辑:
为了符合您的最新更改,即使其通用。让我们编写一个函数来搜索某个值并替换它的值。我将使用与目前相同的方法。
def change_parameter(match_str, change_value, list1):
# First, let's create a regex for it, and compile it
r = re.compile(r'{0}\s*=\s*\d+'.format(match_str))
# Find, and replace the matching string's value
updated_l = [r.sub('{0} = {1}'.format(match_str, change_value), s) if r.match(s) else s for s in list1]
return updated_l
现在,让我们测试这个 change_parameter 方法的不同值:
>>> l = ['data_1 = 3', 're = 3', 'item = 5']
>>> change_parameter('item', 10, l)
['data_1 = 3', 're = 3', 'item = 10']
>>> change_parameter('re', 7, l)
['data_1 = 3', 're = 7', 'item = 5']
对于字符串和浮点数的替换:
>>> change_parameter('re', 7.1, l)
['data_1 = 3', 're = 7.1', 'item = 5']
>>> change_parameter('data_1', '11', l)
['data_1 = 11', 're = 3', 'item = 5']