我有三個清單lst_a。lst_c我想撰寫一個函式,從串列中獲取每個專案,根據lst_b搜索組位置執行正則運算式搜索,并用搜索結果lst_c替換變數。lst_a
這是我的代碼:
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
uj5u.com熱心網友回復:
首先,預期結果不一致。這意味著第三個正則運算式“(foo)(baz)(bar)”會在“foobarbaz”中找到匹配項,這是不正確的。所以第三個結果也應該是“找不到”。
然后對您的嘗試發表一些評論:
隨著引數成為區域變數,您不能期望函式
list_a僅通過分配給區域變數來更改全域變數variables。list_a運行此函式不會改變。為了克服第一個問題,讓函式回傳包含三個結果的串列并且不為此傳遞引數會更合適。
由于要生成串列,因此不應將結果分配給
variables,而是將結果附加到它,因此構建要回傳的串列避免
global陳述。這里不需要它們。避免在函式中使用硬編碼值,例如“foobarbaz”。而是將其作為引數傳遞給函式,因此它變得更加靈活。
不是問題,但是盡管您的問題陳述談到 a
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']
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/487549.html
上一篇:為什么我的應用在我的reactnative應用中多次連接到我的TCP服務器?
下一篇:在函式中使用結構時重復浮點值
