给定字符串替换子字符串,将字符串替换为键,替换为值。蟒蛇

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了给定字符串替换子字符串,将字符串替换为键,替换为值。蟒蛇相关的知识,希望对你有一定的参考价值。

我有一个字典,字符串将被替换为keys并将其替换为值。除了通过令牌查看字符串令牌之外,还有更好/更快的替换方法吗?

我一直在这样做:

segmenter = {'foobar':'foo bar', 'withoutspace':'without space', 'barbar': 'bar bar'}

sentence = "this is a foobar in a barbar withoutspace"

for i in sentence.split():
  if i in segmenter:
    sentence.replace(i, segmenter[i])
答案

字符串在python中是不可变的。因此,str.replace返回一个新字符串,而不是修改原始字符串。你可以在这里使用str.join()和list comprehension:

>>> segmenter = {'foobar':'foo bar', 'withoutspace':'without space', 'barbar': 'bar bar'}
>>> sentence = "this is a foobar in a barbar withoutspace"

>>> " ".join( [ segmenter.get(word,word) for word in sentence.split()] )
'this is a foo bar in a bar bar without space'

str.replace的另一个问题是它也会替换像"abarbarb"这样的词

"abar barb"

另一答案

re.sub可以调用返回替换的函数

segmenter = {'foobar':'foo bar', 'withoutspace':'without space', 'barbar': 'bar bar'}
sentence = "this is a foobar in a barbar withoutspace"

import re

def fn(match):
    return segmenter[match.group()]

print re.sub('|'.join(re.escape(k) for k in segmenter), fn, sentence)

以上是关于给定字符串替换子字符串,将字符串替换为键,替换为值。蟒蛇的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中将具有给定形式的子字符串替换为另一个

字符串替换

2022-03-25:给定一个长度为 N 的字符串 S,由字符‘a‘和‘b‘组成,空隙由 ‘?‘ 表示。 你的任务是用a字符或b字符替换每个间隙, 替换完成后想让连续出现同一种字符的最长子串尽可能短。

用占位符替换字符串并在函数之后将它们替换回来。

在忽略特殊字符的同时匹配和替换子字符串

Hive 查询仅替换第一次出现的子字符串