将单词中以特定字母开头和结尾的字母替换为相同数量的特定字符

问题描述 投票:0回答:1

我使用以下代码将每个非首字母和非结尾字母替换为

!
在以
a
开头和结尾的单词中,不包含
a
单词中的其他任何位置:

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
python regex
1个回答
-2
投票

你可以使用

import re

txt = 'aba accca azzza wwwwa accca wwasdwaww abmasedmwa'
pattern = r'(?<=\ba)[^\Wa]+(?=a\b)'
print( re.sub(pattern, lambda x: '!' * len(x.group()), txt) )

查看 Python 演示

详情

  • (?<=\ba)
    - 正向后查找,与单词开头的
    a
    紧接的位置匹配
  • [^\Wa]+
    - 除
    a
  • 之外的一个或多个单词字符
  • (?=a\b)
    - 正向前瞻,匹配单词末尾紧随其后的
    a
    的位置

输出:

a!a a!!!a a!!!a wwwwa a!!!a wwasdwaww abmasedmwa

lambda x: '!' * len(x.group())
替换用相同数量的
!
字符替换匹配值。

© www.soinside.com 2019 - 2024. All rights reserved.