如何将字符串符号转为未移位对应字符并统一转为小写?
问题描述
现有字符串定义如下:
x = "Foo 890 bar *()"
我们需要完成两个需求:
- 将字符串中的
"*()"替换为原字符串里的数字890 - 把所有字母转为小写
最终预期得到的结果是:
"foo 890 bar 890 "
但直接调用x.lower()只能得到非预期的结果:
x.lower() => "foo 890 bar *()"
求可行的解决方案。
解决方案
这里给你几个简单易实现的方法,根据你的需求选就行:
方法1:先替换目标子串,再转小写
这是最直接的思路,先把"*()"替换成"890",再统一将字母转小写。代码如下:
x = "Foo 890 bar *()" processed_str = x.replace("*()", "890").lower() print(processed_str) # 输出: foo 890 bar 890
因为替换的内容是数字,不受大小写转换影响,所以这个顺序完全没问题。
方法2:先转小写,再替换(效果一致)
如果你习惯先处理字母大小写,也可以先转小写再替换"*()",结果是一样的:
x = "Foo 890 bar *()" processed_str = x.lower().replace("*()", "890") print(processed_str) # 输出: foo 890 bar 890
毕竟*()本身没有大小写之分,两种顺序都能达到目的。
方法3:动态提取数字(更灵活)
如果以后字符串里的数字可能变化,不想硬写890,可以用正则表达式先提取出字符串中的数字,再做替换。这样不管数字是多少,都能自动匹配替换:
import re x = "Foo 890 bar *()" # 提取字符串中的第一个数字串 matched_num = re.search(r'\d+', x).group() processed_str = x.lower().replace("*()", matched_num) print(processed_str) # 输出: foo 890 bar 890
比如如果原字符串变成"Hello 456 world *()",这个代码也能自动输出"hello 456 world 456 ",不用修改替换的目标值,扩展性更强。
内容的提问来源于stack exchange,提问作者DCA-
相关产品推荐
相关产品推荐

