编写Lambda函数实现正则捕获组匹配替换冗余括号内容
问题需求
需要编写Lambda函数结合正则表达式,移除字符串中冗余的括号内容。匹配规则为:数字后紧跟括号,括号内仅包含与前置数字完全相同的内容(允许括号内有空格),此时移除该括号及内部内容。
初始代码框架
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"
完善后的代码实现
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" # 正则表达式:捕获前置数字,以及括号内仅含该数字(允许空格)的内容 capture_groups_with_regex = r'(\d+)\(\s*\1\s*\)' # Lambda函数:只保留捕获到的前置数字,移除括号及内部内容 lambda_fuction_result = lambda m: m.group(1) input_text = re.sub(capture_groups_with_regex, lambda_fuction_result, input_text) print(repr(input_text))
代码解释
- 正则表达式
r'(\d+)\(\s*\1\s*\)':(\d+):捕获一个或多个数字,作为分组1;\(:匹配左括号;\s*:匹配0个或多个空格;\1:引用分组1的内容,确保括号内的内容和前置数字完全一致;\s*:再次匹配括号内的空格;\):匹配右括号。
- Lambda函数:直接返回捕获到的前置数字(分组1的内容),相当于把
数字(数字)或数字( 数字 )替换成数字,达到移除冗余括号的效果。
内容的提问来源于stack exchange,提问作者Matt095
相关产品推荐
相关产品推荐

