仅替换 re.sub 中的部分正则表达式

Substitute only part of regex in re.sub

我只想替换传递给 re.sub 的正则表达式的一部分([^\d+] 只是为了确保在此之后没有数字,即整个整数(与所有数字)被捕获)。但是,下面的代码替换了下一个字符(即在第一个示例中吞下了下一个“”)。

import re
pattern = r'foo-%d[^\d+]'

k = 12 # only substitute entire "foo-12" occurrences
result = re.sub(pattern % k, '@foo-%d@' % k, 'dasds foo-12 gfd9843')
# got: result == 'dasds @foo-12@gfd9843'
assert result == 'dasds @foo-12@ gfd9843', result

k = 1 # only substitute entire "foo-1" occurrences
result = re.sub(pattern % k, '@foo-%d@' % k, 'dasds foo-12 gfd9843')
assert result == 'dasds foo-12 gfd9843', result

k = 1 # only substitute entire "foo-1" occurrences
result = re.sub(pattern % k, '@foo-%d@' % k, 'dasds foo-11 gfd9843')
assert result == 'dasds foo-11 gfd9843', result

我该如何解决这个问题?我是否至少在正则表达式的正确轨道上?

这里使用\b

import re
k = 12 # only substitute entire "foo-12" occurrences
s = 'dasds foo-12 gfd9843'
result = re.sub(r'foo-%d\b' % k, '@foo-%d@' % k, s)

# got: result == 'dasds @foo-12@gfd9843'
assert result == 'dasds @foo-12@ gfd9843', result


k = 1 # only substitute entire "foo-1" occurrences
result = re.sub(r'foo-%d\b' % k, '@foo-%d@' % k, s)
assert result == 'dasds foo-12 gfd9843', result