我有一个字符串s = 'sdfjoiweng%@$foo$fsoifjoi'
,我想将'foo'
替换为'bar'
。
我尝试了re.sub(r'\bfoo\b', 'bar', s)
和re.sub(r'[foo]', 'bar', s)
,但它没有做任何事情。我做错了什么?
答案 0 :(得分:7)
您可以直接替换它:
>>> 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
如果您只想替换字符串中第一次出现的foo
而不是所有foo
次出现,那么alecxe的回答就是这样。
答案 1 :(得分:3)
re.sub(r'\bfoo\b', 'bar', s)
此处,\b
定义the word boundaries - 单词字符(\w
)和非单词字符之间的位置 - 正是您在foo
内匹配的内容sdfjoiweng%@$foo$fsoifjoi
字符串。适合我:
In [1]: import re
In [2]: s = 'sdfjoiweng%@$foo$fsoifjoi'
In [3]: re.sub(r'\bfoo\b', 'bar', s)
Out[3]: 'sdfjoiweng%@$bar$fsoifjoi'
答案 2 :(得分:3)
您可以直接使用替换功能,而不是使用正则表达式。
>>> s = 'sdfjoiweng%@$foo$fsoifjoifoo'
>>>
>>> s.replace("foo","bar")
'sdfjoiweng%@$bar$fsoifjoibar'
>>>
>>>
答案 3 :(得分:1)
要进一步添加到上面,下面的代码向您展示了如何一次替换多个单词!我已经用它一步一步替换了165,000个单词!
注意\ b表示没有子字符串匹配。必须是整个单词。如果将其删除,它将使子字符串匹配。
import re
s = 'thisis a test'
re.sub('\bthis\b|test','',s)
这给出了:
'thisis a '