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

时间:2015-04-14 09:52:24

标签: 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_check='''
Helloa1256
Hello a1256
Hello a1256
Hello a1256
'''
x=re.sub('\ba(?=\d\d\d\d\b)','A',str_check)
print(x)

为什么整个单词搜索失败?

2 个答案:

答案 0 :(得分:1)

使用positive lookahead assertion

re.sub(r'\ba(?=\d{4}\b)','A',string)

断言不会消耗任何字符,但断言是否可以匹配。因此,上面的正则表达式只匹配a,后跟恰好4位数。将匹配的a替换为A将为您提供所需的输出。

capturing group

re.sub(r'\ba(\d{4})\b',r'A\1',string)

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

答案 1 :(得分:0)

re.sub(r'\ba(?=\d\d\d\d\b)','A',str)

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