[英]Replacing a variable in a list with the result of a regex search in a Python function
我有三个列表lst_a
到lst_c
。 我想编写一个函数,从列表中获取每个项目,根据 lst_b 执行正则表达式搜索,根据lst_b
搜索组位置, lst_a
lst_c
的变量。
这是我的代码:
import re
var_1 = var_2 = var_3 = "replace_me"
lst_a = [
var_1,
var_2,
var_3,
]
lst_b = [
'(foo)(bar)',
'(foo)(bar)(baz)',
'(foo)(baz)(bar)',
]
lst_c = [1, 2, 3]
def lst_search_n_save(variables, regex, position):
global lst_a
global lst_b
for r in regex:
try:
variables = re.search(r, "foobarbaz")
#variables := re.search(r, "foobarbaz") -> not working
print(variables)
print(rf"{variables.group(position)}")
except (AttributeError, TypeError, IndexError):
print("error" + "\n")
variables = "not found"
lst_search_n_save(lst_a, lst_b, lst_c[2])
print(lst_a)
搜索和查找工作,但我无法获得将其结果保存到lst_a
变量中的函数。 这就是我得到的:
<re.Match object; span=(0, 6), match='foobar'>
error
<re.Match object; span=(0, 9), match='foobarbaz'>
baz
None
error
['replace_me', 'replace_me', 'replace_me']
在我的示例中使用的位置参数的预期输出应该是:
print(lst_a)
['not found', 'baz', 'bar']
print(lst_a[1])
baz
首先,预期结果不一致。 这意味着第三个正则表达式“(foo)(baz)(bar)”会在“foobarbaz”中找到匹配项,这是不正确的。 所以第三个结果也应该是“找不到”。
然后对您的尝试发表一些评论:
随着参数成为局部变量,您不能期望函数仅通过分配给局部变量variables
来更改全局list_a
。 list_a
不会因运行此函数而改变。
为了克服第一个问题,让函数返回包含三个结果的列表并且不为此传递参数会更合适。
由于要生成列表,因此不应将结果分配给variables
,而是将结果附加到它,因此构建要返回的列表
避免global
语句。 这里不需要它们。
避免在函数中使用硬编码值,例如“foobarbaz”。 而是将其作为参数传递给函数,因此它变得更加灵活。
不是问题,但是尽管您的问题陈述提到了list_c
,但您的代码只使用该列表中的一个值。 所以它不需要是一个列表。 但我会保持这部分不变。
我会避免调用变量variables
,这表明这个变量包含变量......这没有什么意义。 我们称之为results
。
这是一个更正:
import re
def lst_search_n_save(regex, position, s):
results = []
for r in regex:
try:
match = re.search(r, s)
result = match.group(position)
except (AttributeError, TypeError, IndexError):
result = "not found"
results.append(result)
return results
# Example given in question:
lst_b = ['(foo)(bar)', '(foo)(bar)(baz)', '(foo)(baz)(bar)']
lst_c = [1, 2, 3]
lst_a = lst_search_n_save(lst_b, lst_c[2], "foobarbaz")
print(lst_a) # ['not found', 'baz', 'not found']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.