替换字符串中出现超过的模式一次

2024-04-20 07:19:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一根绳子:

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

我想取代第二个“查理”,但不是第一个。在

预期字符串:

^{pr2}$

我用下面的语句来做这个

>>> 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?"

但它取代了我想要的。在

我怎么能让它只取代第二个“查理”而不换其他东西?在


Tags: 字符串reyounot语句amhowhey
3条回答

将第一个子字符串(以及其后的所有子字符串)替换为自身,并添加一个limit=1以防止替换第4个、第6个等出现的子字符串。在

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

对于固定模式(不是您的情况),前后看断言可能很方便:

re.sub(r'(?<=Hey )charlie','Tony',string

您需要在表达式中使用分组。在

看看这是否是你想要的:

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

相关问题 更多 >