python - 替换字符串中多次出现的模式一次

标签 python regex substitution

我有一个字符串:

I am Tony not charlie, Hey charlie how's you?

我想替换第二个“Charlie”,而不是第一个。

期望的字符串:

I am Tony not charlie, Hey Tony how's you?

我正在使用以下语句来执行此操作

>>> re.sub(r',\s\w{3}\scharlie\s', ' Tony ', 'I am Tony not charlie, Hey charlie how\'s you\?')
"I am Tony not charlie Tony how's you?"

但它取代的比我想要的更多。

我怎样才能让它只替换第二个“查理”而不替换其他任何东西?

最佳答案

将第一个子字符串(及其后的所有内容)替换为自身并添加一个限制 =1 以防止替换第 4 次、第 6 次等。

s = "I am Tony not charlie, Hey charlie how's you?"
print re.sub('(charlie.*?)charlie', r'\1Tony', s, 1)

关于python - 替换字符串中多次出现的模式一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23488969/

相关文章:

python - 对于嵌入式 Python,前缀 PYTHONPATH 不在 sys.path 中

Python - 替换字符串中的非 ASCII 字符 (»)

python - 时间格式正则表达式 HH :MM AM/am/PM/pm in python

python - (Mel) Substitute、Maya 的 Python 等效项是什么

python - MultiIndex 来自两个索引的唯一值的乘积

python - 无法对对象 : pymongo. 光标进行编码。光标对象位于

regex - Sed 用另一个字符的多次重复替换一个字符的多次重复

Vim 多行搜索模式

python - 为什么我的图像闪烁? (皮游戏)

java - 字符类减法