如何使用regex替换所有子字符串?

2024-06-26 14:42:43 发布

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

我有一个字符串s = 'sdfjoiweng%@$foo$fsoifjoi',我想用'bar'替换'foo'

我试过re.sub(r'\bfoo\b', 'bar', s)re.sub(r'[foo]', 'bar', s),但没有任何效果。我做错什么了?


Tags: 字符串refoobar效果fsoifjoibfoo
3条回答

您可以直接使用replace函数而不是regex。

>>> s = 'sdfjoiweng%@$foo$fsoifjoifoo'
>>>
>>> s.replace("foo","bar")
'sdfjoiweng%@$bar$fsoifjoibar'
>>>
>>>

re.sub(r'\bfoo\b', 'bar', s)

这里,\b定义了一个单词字符(\w)和一个非单词字符之间的the word boundaries位置,这正是您在sdfjoiweng%@$foo$fsoifjoi字符串中为foo匹配的位置。对我有用:

In [1]: import re

In [2]:  s = 'sdfjoiweng%@$foo$fsoifjoi'

In [3]: re.sub(r'\bfoo\b', 'bar', s)
Out[3]: 'sdfjoiweng%@$bar$fsoifjoi'

您可以直接替换它:

>>> import re
>>> s = 'sdfjoiweng%@$foo$fsoifjoi'
>>> print re.sub('foo','bar',s)
sdfjoiweng%@$bar$fsoifjoi

它也适用于更多的foo事件,如下所示:

>>> s = 'sdfjoiweng%@$foo$fsoifoojoi'
>>> print re.sub('foo','bar',s)
sdfjoiweng%@$bar$fsoibarjoi

如果您只想替换第1个出现的foo,而不是字符串中所有出现的foo,那么alecxe的答案就是这样。

相关问题 更多 >