大家好,我是皮皮。
一、前言
前几天在Python最强王者群有个叫【老松鼠】的粉丝问了一道关于字符串处理问题,如下图所示。
原文本如下所示:
代码语言:javascript复制比如"WeLovePython"
转化为为"We love python"
意思就是输出的字符串,第一个是大写,后面全部是小写。
二、实现过程
这里【冷喵】给了一个思路:挨个循环 如果是大写字母检查前面有没有空格 没有空格就加一个 最后把开头的那个空格去掉。这里【瑜亮老师】给了一份代码,如下图所示:
代码语言:javascript复制# coding:utf-8
# @Time : 2022/5/4 11:46
# @Author: 皮皮
# @公众号: Python共享之家
# @website : http://pdcfighting.com/
# @File : 字符串.py
# @Software: PyCharm
text = "WeLovePython"
res = ''.join([" " i if i.isupper() else i for i in text]).strip()
print(res)
思路:如果是大写字母就变成空格 大写,否则就不变。这个代码亲测好使,运行之后结果如下。
这里确实是实现了单词的拆分,每个单词的首字母大写了。不过有个细节需要注意下,题目的要求是除了第一个字母大写外,后面要变小写。所以目前是解决了一半,还有一半需要继续解决。
这里【冷喵】给了一份代码,如下所示:
代码语言:javascript复制text = "WeLovePython"
res = ''.join([" " i if i.isupper() else i for i in text]).strip()
print(res)
b = res[0] ''.join([i.lower() for i in res[1:]])
print(b)
代码运行之后,结果如下图所示:
【月神】后来在这个代码的基础上,也给了一份代码,如下所示:
代码语言:javascript复制text = "WeLovePython"
res = text[0] ''.join([" " i if i.isupper() else i for i in text[1:]]).lower()
print(res)
res = ''.join([" " i if i.isupper() else i for i in text]).strip().capitalize()
print(res)
一共两种方法。
后来【瑜亮老师】也补充了一份代码,思路一致的,具体实现上有所变形。思路:先取出首字母,然后剩余的小写不用动,大写直接变成空格 小写。
代码语言:javascript复制text = "WeLovePython"
res1 = text[0] ''.join([" " i.lower() if i.isupper() else i.lower() for i in text[1:]])
print(res1)
后来【冯诚】也给了一个代码,本质上是一样的,如下所示。
代码语言:javascript复制text = "WeLovePython"
res = ''.join([" " i if i.isupper() else i for i in text]).strip()
res1=res[:1] res[1:].lower()
res1
后来【月神】还给了一份正则表达式的代码,有点新奇。
代码语言:javascript复制import re
text = "WeLovePython"
result = re.sub(r'w[A-Z]', lambda x: ' '.join(x.group(0).lower()), text)
print(result)
对正则表达式不熟悉的小伙伴,理解起来还是有点难懂的。这里稍微拆解了下,帮助大家理解,如下图所示:
三、总结
大家好,我是皮皮。这篇文章主要盘点一个字符串处理问题(拆分英文文本),文中给出了五个方法,思路基本上都是一致的,如果你还有其他方法,也欢迎大家积极尝试,一起学习,记得分享给我哦。
最后感谢粉丝【老松鼠】提问,感谢【冷喵】、【逸】、【冯诚】、【瑜亮老师】和【月神】在运行过程中给出的思路和代码建议,感谢粉丝【dcpeng】等人参与学习交流。