在Python中用正则表达式替换模式的一部分

在Python中用正则表达式替换模式的一部分,python,regex,Python,Regex,我正在尝试一些非常简单的事情。我的绳子是 Hello a1234 World a3456 Python a4567 a4567 我想找到所有的单词 从一开始 后面有四个数字 在这种情况下,我想用“a”替换小的“a” re.sub("\ba\d\d\d\d\b','A\d\d\d\d',str) 我知道上面的正则表达式是错误的。我希望输出为 Hello A1234 World A3456 Python A4567 A4567 如何仅替换我获得的匹配的一部分 使用新字符串编辑 str_ch

我正在尝试一些非常简单的事情。我的绳子是

Hello a1234 World a3456 Python a4567 a4567
我想找到所有的单词

  • 从一开始
  • 后面有四个数字
在这种情况下,我想用“a”替换小的“a”

re.sub("\ba\d\d\d\d\b','A\d\d\d\d',str)
我知道上面的正则表达式是错误的。我希望输出为

Hello A1234 World A3456 Python A4567 A4567
如何仅替换我获得的匹配的一部分

使用新字符串编辑

str_check='''
Helloa1256
Hello a1256
Hello a1256
Hello a1256
'''
x=re.sub('\ba(?=\d\d\d\d\b)','A',str_check)
print(x)
为什么整个单词搜索在此失败?

请使用

断言不会使用任何字符,但会断言匹配是否可能。因此,上面的正则表达式只匹配后面紧跟着4位数字的
a
。将匹配的
a
替换为
a
将获得所需的输出

这将把字母
a
后面的4位数字捕获到一个组中。稍后,我们可以通过在替换部分(如
\1
(指第一组))中指定其索引号来引用捕获的字符


只需使用
lookahead
,因为您只想捕获单个字符,而不是后面的
4
数字。

谢谢!如果对多行字符串使用\b,则不会进行替换。但是当我删除\b时它会起作用。知道为什么吗?另外,你能解释一下为什么\b在括号内而不是在括号外是封闭的吗?@user567
\b
在lookahead内,因为我们说,找到一个
a
,它后面有
4
个数字,然后是一个
\b
。因此一个
a
后面有
5个
个数字将不匹配。对于多行字符串,你能预测一下吗你试过的那根绳子
re.sub(r'\ba(?=\d{4}\b)','A',string)
re.sub(r'\ba(\d{4})\b',r'A\1',string)
re.sub(r'\ba(?=\d\d\d\d\b)','A',str)