如何用Python正则仅保留字符串中的数字47和12?
提取指定数字的正则解决方案
你的原代码中,正则表达式[+-]?\b\d+\b会匹配字符串中所有独立的数字序列,导致返回结果包含128、34、43这些不需要的数字,无法得到预期的[47, 12]。以下是两种可行的修改方案:
方案一:分步提取+筛选
先提取所有括号内的内容,再从中筛选出目标数字:
import re def integers_in_brackets(s): # 提取所有括号包裹的内容 bracket_contents = re.findall(r'\[(.*?)\]', s) target_nums = [] for content in bracket_contents: # 从括号内容中提取整数(支持正负号) num_strs = re.findall(r'[+-]?\d+', content) for num_str in num_strs: num = int(num_str) # 仅保留47和12 if num in (47, 12): target_nums.append(num) return target_nums # 测试示例 s = "afd [128+] [47 ] [a34] [ +-43 ]tt [+12]xxx!" print(integers_in_brackets(s)) # 输出:[47, 12]
方案二:正则直接匹配目标
通过正则精准定位括号内的目标数字,一步提取:
import re def integers_in_brackets(s): # 匹配括号内包含47或±12的内容,提取数字部分 matches = re.findall(r'\[.*?([+-]?(47|12))\]', s) # 提取有效数字并转换为整数 target_nums = [int(match[0]) for match in matches] return target_nums # 测试示例 s = "afd [128+] [47 ] [a34] [ +-43 ]tt [+12]xxx!" print(integers_in_brackets(s)) # 输出:[47, 12]
两种方案都能满足需求:方案一灵活性更强,后续调整目标数字只需修改筛选条件;方案二更简洁,通过正则直接锁定目标。
内容的提问来源于stack exchange,提问作者AATU
相关产品推荐
相关产品推荐

