在Python中使用re.sub替换仅出现在字符串开头的字符

在Python中使用re.sub替换仅出现在字符串开头的字符,python,regex,Python,Regex,我只希望第二个p被k替换 string="paper" d=re.sub('[^p]p','k',string) print d 这是给我的回报pker 我不知道为什么a也被替换了 试试这个,使用捕获组和反向引用来捕获第二个p之前的所有内容以及第二个p之后的所有内容: re.sub(r'(.+)p(.+)', r'\1k\2', string) => 'paker' 尝试使用捕获组和反向引用来捕获第二个p之前的所有内容以及第二个p之后的所有内容: re.sub(r'(.+)p(.+)'

我只希望第二个
p
k
替换

string="paper"
d=re.sub('[^p]p','k',string)
print d
这是给我的回报
pker


我不知道为什么
a
也被替换了

试试这个,使用捕获组和反向引用来捕获第二个
p
之前的所有内容以及第二个
p
之后的所有内容:

re.sub(r'(.+)p(.+)', r'\1k\2', string)
=> 'paker'

尝试使用捕获组和反向引用来捕获第二个
p
之前的所有内容以及第二个
p
之后的所有内容:

re.sub(r'(.+)p(.+)', r'\1k\2', string)
=> 'paker'

您可以使用反向查找并指定仅发生一次替换:

>>> import re
>>> s = 'paper'
>>> re.sub('(?<!^)p', 'k', s, 1)
'paker'

您可以使用反向查找并指定仅发生一次替换:

>>> import re
>>> s = 'paper'
>>> re.sub('(?<!^)p', 'k', s, 1)
'paker'

我一直在胡闹,试图让它对任何单词的第一个字母起作用,但没有指定:

re.sub(r'(\w)(?=\w*\1\b)', 'k', s[::-1])[::-1]
它需要一个Python不支持的可变长度lookbehind,因此为了克服这个问题,我反转字符串,使用可变长度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'

我一直在胡闹,试图让它对任何单词的第一个字母起作用,但没有指定:

re.sub(r'(\w)(?=\w*\1\b)', 'k', s[::-1])[::-1]
它需要一个Python不支持的可变长度lookbehind,因此为了克服这个问题,我反转字符串,使用可变长度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'

+1教我替换有第三个参数:)+1教我替换有第三个参数:)你想解决一个更一般的问题吗?你想解决一个更一般的问题吗?