我希望只有第二个p
替换为k
。
string="paper"
d=re.sub('[^p]p','k',string)
print d
这让我返回pker
。
我不知道为什么a
也被替换了。
答案 0 :(得分:2)
您可以使用负面外观并指定仅发生一次替换:
>>> import re
>>> s = 'paper'
>>> re.sub('(?<!^)p', 'k', s, 1)
'paker'
但是你可以在没有正则表达式的情况下做到这一点:
s[0] + s[1:].replace('p', 'k', 1)
答案 1 :(得分:1)
尝试使用捕获组和反向引用来捕获所有之前第二个p
以及所有之后 第二个p
:
re.sub(r'(.+)p(.+)', r'\1k\2', string)
=> 'paker'
答案 2 :(得分:0)
我一直在努力让这个用于任何单词的第一个字母 - 没有指定它:
re.sub(r'(\w)(?=\w*\1\b)', 'k', s[::-1])[::-1]
它需要一个Python不支持的可变长度lookbehind,所以要通过它我反转字符串,使用可变长度前瞻然后反转结果:
>>> s = 'paper';
>>> re.sub(r'(\w)(?=\w*\1\b)', 'k', s[::-1])[::-1]
'paker'
对于一个句子,它使用每个单词的第一个字母:
>>> s = 'arabia bababooie paper';
>>> re.sub(r'(\w)(?=\w*\1\b)', 'k', s[::-1])[::-1]
'arkbik bakakooie paker'