Python中区分大小写的字符串替换
我需要以区分大小写的方式替换字符串。比如说 abc -> def Abc -> Def aBc -> dEf abC -> deF abc->def Abc->Def aBc->dEf abC->deFPython中区分大小写的字符串替换,python,string,replace,Python,String,Replace,我需要以区分大小写的方式替换字符串。比如说 abc -> def Abc -> Def aBc -> dEf abC -> deF abc->def Abc->Def aBc->dEf abC->deF 我可以用Python做些什么呢?这不是最有效的方法,而且非常粗糙,但类似的方法可能会奏效: def case_insensitive_replace(string, old, new): upper_indices = [idx for idx, char in enumerate(st
我可以用Python做些什么呢?这不是最有效的方法,而且非常粗糙,但类似的方法可能会奏效:
def case_insensitive_replace(string, old, new):
upper_indices = [idx for idx, char in enumerate(string) if char.isupper()]
replaced = list(string.lower().replace(old.lower(), new.lower()))
for idx in upper_indices:
replaced[idx] = replaced[idx].upper()
return "".join(replaced)
这里有一个使用正则表达式的方法。关键点是,当找到匹配项时,它首先修改替换管柱,以匹配匹配管柱的套管。这是因为
re.sub
可以用函数代替字符串
import re
def case_sensitive_replace(s, before, after):
regex = re.compile(re.escape(before), re.I)
return regex.sub(lambda x: ''.join(d.upper() if c.isupper() else d.lower()
for c,d in zip(x.group(), after)), s)
test = '''
abc -> def
Abc -> Def
aBc -> dEf
abC -> deF
'''
result = case_sensitive_replace(a, 'abc', 'def')
print(result)
结果:
def -> def
Def -> Def
dEf -> dEf
deF -> deF
de De dE de DE
def Def dEf deF DEF
defg Defg dEfg deFg DEFG
定义->定义
定义->定义
定义->定义
定义->定义
我知道您想根据第一个字符串更改第二个字符串的大小写。 我说得对吗?因此,我的解决方案如下。字符串s2根据对应的字符串s1更改其大小写。结果存储在s3中。这里的一个假设是两个字符串具有相同的长度
s1 = "AaBb"
s2 = "cdef"
s3 = ""
index = 0
length = len(s1)
while(True):
if s1[index].isupper():
temp = s2[index].upper()
else:
temp = s2[index].lower()
s3 = s3 + temp
index +=1
if index == length:
break
print s3
长期潜伏者,我想我会在这里发布一个建议,因为其中一些似乎相当复杂
print map(lambda a, b: b.lower() if a.islower() else b.upper(), "aBc", "def")
它确实假设两个字符串的长度相同,但是您可以轻松地用适当的函数替换lambda,并在第一次输入时检查无值。这将起作用,尽管您可能希望添加一些检查,以确保字符串长度相同:
string1 = "AbcDEFghiJKLmnO"
string2 = "some other text"
string2 = "".join((string2[i].upper() if string1[i].isupper() else string2[i].lower()
for i in range(len(string1))))
扩展马克·拜尔斯的答案,这里有一个解决方案,它适用于任何长度的替换文本
诀窍是向发送函数 结果: def -> def Def -> Def dEf -> dEf deF -> deF
de De dE de DE
def Def dEf deF DEF
defg Defg dEfg deFg DEFG
@标记:wiki使用上/下字符作为wiki名称。我需要替换一些wiki名称。“wSg”的替换名称是什么?您所问问题的答案可能对您试图解决的问题没有帮助。如果前后有不同的长度怎么办?@Mark:实际上,我只是根据一小部分规则替换字符串,而不是尝试替换所有可能的wiki名称组合。所以,威廉·泰尔的回答对我来说很有效。感谢您的回答。这假设同一个字符在输入字符串中不会出现两次。这不适用于将“foo”替换为“bar”,因为“o”字符必须根据上下文映射到“a”或“r”。