import re
input_text = "Asegurarse que halla 4(4) o 5( 5 ) de ellos, también 24(24 48), o sino 24, (24 )no 66(70 y seis), o () 56(), 56(5 6) ssd 56"
lambda_fuction_result = lambda m: re.sub(r"", "", m.group())
input_text = re.sub(capture_groups_with_regex, lambda_fuction_result, input_text)
print(repr(input_text)) # --> output
我需要獲得的正確輸出:
"Asegurarse que halla 4 o 5 de ellos, también 24(24 48), o sino 24, (24 )no 66(70 y seis), o () 56(), 56(5 6) ssd 56"
我需要從主字串中洗掉在括號之間重復輸入的資料,因為它們是多余的說明。僅當括號緊跟在數字之后,并且括號內的數字恰好等于它們之前的數字時才應該進行這些替換,您還必須考慮括號內的數字必須是單獨的,并且必須有里面什么都沒有。
正則運算式應該看起來像這樣r"\d*[\s|]([\s|]*\d*[\s|]*)[\s|]",但是它有一些驗證,允許我評估\d*括號前面的值等于\d*括號里面的值
uj5u.com熱心網友回復:
據我了解,您的任務是洗掉帶有數字的括號,如果它等于這些括號之前的數字。
首先,您需要一個正則運算式,它匹配單獨捕獲組中括號中的數字和數字:
(\d )\s*\(\s*(\d )\s*\)
鏈接到演示。
要檢查兩個捕獲組的值是否相等,我們可以利用 的特性re.sub()并將函式傳遞給第二個引數,該引數將比較組并回傳數字或完全匹配。
def replace(match):
if match.group(1) == match.group(2):
return match.group(1)
else:
return match.group(0) # keep same
input_text = "this 0( 0) is 0 (1 ) test 100 ( 1 0 0 ) string 1(1)."
result = re.sub(r"(\d )\s*\(\s*(\d )\s*\)", replace, input_text)
讓我們縮短我們的功能。使用索引(例如match[0])訪問捕獲組更加緊湊。我們也可以應用一些python 魔法。在 python中Trueequals1和Falseequals 0and (你可能已經注意到了)我們的replace()函式回傳 group0或 group 1。將所有這些結合在一起,我們可以使用條件本身作為組的索引:
def replace(match):
return match.group(match.group(1) == match.group(2))
# OR
def replace(match):
return match[match[1] == match[2]]
# OR
replace = lambda m: m[m[1] == m[2]]
代碼的縮短版本:
input_text = "this 0( 0) is 0 (1 ) test 100 ( 1 0 0 ) string 1(1)."
result = re.sub(r"(\d )\s*\(\s*(\d )\s*\)", lambda m: m[m[1] == m[2]], input_text)
輸出:
this 0 is 0 (1 ) test 100 ( 1 0 0 ) string 1.
你可以幫助我的國家,查看我的個人資料資訊。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/518517.html
