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

Python正则替换问题:替换首尾为a且无内部a的单词中间字符为!

问题描述

需要实现:将首尾为a且内部不包含a的单词中,除首尾字符外的每个字符替换为!。

原Python代码:

import re

txt = 'aba accca azzza wwwwa accca wwasdwaww abmasedmwa'

regex = re.sub(r'\ba([^a]+)a\b', r'!\1!', txt)
print(regex)

当前输出:

!b! !ccc! !zzz! wwwwa !ccc! wwasdwaww abmasedmwa

期望输出:

a!a a!!!a a!!!a wwwwa a!!!a wwasdwaww abmasedmwa
解决方案

原代码的问题在于替换表达式r'!\1!'错误地将匹配到的单词首尾的a也替换成了!,而我们需要保留首尾的a,仅替换中间字符。

修正后的代码可以通过回调函数生成符合要求的替换内容:

import re

txt = 'aba accca azzza wwwwa accca wwasdwaww abmasedmwa'

def replace_middle_chars(match):
    # 获取匹配到的中间非a字符组
    middle_content = match.group(1)
    # 生成等长的!字符串,拼接首尾a
    return f'a{"!" * len(middle_content)}a'

result = re.sub(r'\ba([^a]+)a\b', replace_middle_chars, txt)
print(result)

也可以用lambda函数简化写法:

import re

txt = 'aba accca azzza wwwwa accca wwasdwaww abmasedmwa'

result = re.sub(r'\ba([^a]+)a\b', lambda m: f'a{"!"*len(m.group(1))}a', txt)
print(result)
代码说明
  • 正则表达式r'\ba([^a]+)a\b'逻辑正确:匹配首尾为a、中间不含a的完整单词,([^a]+)捕获中间的非a字符组。
  • 回调函数(或lambda)通过match.group(1)获取中间内容,生成与该内容长度一致的!字符串,再拼接首尾的a,最终得到符合期望的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 19:45:56