You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Python正则表达式代码以实现指定字符串格式转换?

问题:修改Python正则表达式实现指定格式输出

现有如下Python正则表达式代码,输出结果为['A_B1_C', 'A_B2_C', 'A_D2_C'],但期望得到的结果是['(A)_(B)(1)_(C)', '(A)_(B)(2)_(C)', '(A)_(D)(2)_(C)'],请问应如何修改该代码?

原代码:

import re
texts = ['A_B1_C', 'A_B2_C', 'A_D2_C']
keyword = '(A)_(B|D)(.*)_(C)'
[(re.search(keyword, text).group()) for text in texts]

解决方案

原代码中re.search(...).group()默认返回整个匹配的原始字符串,不会自动将捕获组按你需要的格式重组。你需要手动提取各捕获组内容,再按目标格式拼接:

修改后的代码(循环版)

import re
texts = ['A_B1_C', 'A_B2_C', 'A_D2_C']
keyword = '(A)_(B|D)(.*)_(C)'
result = []
for text in texts:
    match_obj = re.search(keyword, text)
    if match_obj:
        # 按目标格式拼接各捕获组
        formatted_str = f'({match_obj.group(1)})_({match_obj.group(2)})({match_obj.group(3)})_({match_obj.group(4)})'
        result.append(formatted_str)
print(result)

简化版(列表推导式)

import re
texts = ['A_B1_C', 'A_B2_C', 'A_D2_C']
keyword = '(A)_(B|D)(.*)_(C)'
result = [
    f'({m.group(1)})_({m.group(2)})({m.group(3)})_({m.group(4)})'
    for m in (re.search(keyword, t) for t in texts)
    if m
]
print(result)

关键说明

你的正则表达式已经正确划分了4个捕获组:

  • group(1): 匹配A
  • group(2): 匹配B或D
  • group(3): 匹配中间的数字(如1、2)
  • group(4): 匹配C

通过f-string将每个捕获组用括号包裹,再按(组1)_(组2)(组3)_(组4)的格式拼接,即可得到预期输出。


内容的提问来源于stack exchange,提问作者KYKY

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 19:24:52