Python字符串标题格式化问题:保留数字后字母小写
解决方案
原代码里的title()方法会把每个“单词”的首字母大写,这里的“单词”是指以非字母开头的连续序列,所以3g会被当成一个单词,导致g被转成大写G,不符合需求。要实现数字后紧跟的g保持小写、其他单独的小写字母转大写的效果,可以用以下两种方法:
方法一:遍历字符逐个处理
通过遍历字符串的每个字符,判断当前小写字母前是否为数字,以此决定是否转大写:
s = input().strip() output = [] prev_char_is_digit = False for char in s: # 如果当前是小写字母且前一个字符不是数字,转大写 if char.islower() and not prev_char_is_digit: output.append(char.upper()) else: output.append(char) # 更新前一个字符是否为数字的标记 prev_char_is_digit = char.isdigit() print(''.join(output))
方法二:正则表达式替换
利用正则的负向零宽断言,匹配前面不是数字的小写字母,将其替换为大写:
import re s = input().strip() # (?<!\d) 表示前面不能是数字,匹配符合条件的小写字母并转大写 output = re.sub(r'(?<!\d)[a-z]', lambda match: match.group().upper(), s) print(output)
两种方法输入1 w r 3g时,都会输出1 W R 3g,满足需求。
内容的提问来源于stack exchange,提问作者Karan Prem
相关产品推荐
相关产品推荐

