为了账号安全,请及时绑定邮箱和手机立即绑定

小写特定案例的列表,而不是其他案例

小写特定案例的列表,而不是其他案例

长风秋雁 2022-07-19 20:28:39
我目前有一个大小写格式不正确的字符串列表(由字母、大小写、数字和特殊字符组成)。我试图实现的目标是对具有以下格式的列表元素的所有实例进行小写:['ALLUPPERCASE', 'ALL_UPPER_WITH_UNDERSCORES', 'ALL-UPPER-EXCEPT (text here)']用外行的话来说,任何元素要么全部大写,要么全部大写,要么带有下划线“_”或连字符“-”(可以在同一元素中同时包含下划线和连字符,或者除末尾之外的所有大写都有一个空格,然后小写但在括号中的短语。我希望列表中元素的所有其他情况都保持其大小写格式...如果一个元素的格式是这样的The_Text_Here,那么该元素将保持其格式。我认为可行的第一个解决方案是只查看 '(' 之前元素的大小写,然后忽略 '(' 之后的任何内容。我不相信连字符或下划线会影响文本被读取为全大写;但是,我无法确定它们是否存在。将以下代码想象为要遵循的格式:L1 = ['THRESHOLD_BAND', 'THRESHOLD_BAND (copy)', 'TICKER', 'TICKER-TWO',      'Title C (copy)', 'Title C (copy) (copy)']for i in L1:    **add code**    output = **add code**print('\n'.join(output))**terminal**$threshold_band threshold_band (copy) ticker ticker-two Title C (copy) Title C (copy) (copy)
查看完整描述

3 回答

?
慕雪6442864

TA贡献1812条经验 获得超5个赞

使用与您想要小写的模式匹配的正则表达式。


import re

def maybe_downcase(s):

    if re.match(r'^[A-Z_-]+(?:\s\(.*\))?$', s):

        return s.lower()

    else:

        return s


output = [maybe_downcase(x) for x in L1]

正则表达式匹配一系列大写字母、下划线和连字符,可选地后跟空格和括号中的任何内容。


查看完整回答
反对 回复 2022-07-19
?
忽然笑

TA贡献1806条经验 获得超5个赞

您可以执行您在问题中提到的类似方法,但检查字符串中出现的任何小写字母,而不是匹配大写字母(没有导入):


[x if any(y.islower() for y in x.split('(')[0]) else x.lower() for x in L1]

输出:


['threshold_band', 

 'threshold_band (copy)', 

 'ticker', 

 'ticker-two',

 'Title C (copy)', 

 'Title C (copy) (copy)']         


查看完整回答
反对 回复 2022-07-19
?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

这会给你正确的输出吗?


L1 = ['THRESHOLD_BAND', 'THRESHOLD_BAND (copy)', 'TICKER', 'TICKER-TWO',

      'Title C (copy)', 'Title C (copy) (copy)']


L2 = []

for strng in L1:

    s0, *s1 = strng.split('(', 1)

    s0 = s0.lower() if s0 == s0.upper() else s0

    L2.append('('.join((s0, *s1)))


print(*L2, sep='\n')

输出:


threshold_band

threshold_band (copy)

ticker

ticker-two

Title C (copy)

Title C (copy) (copy)


查看完整回答
反对 回复 2022-07-19
  • 3 回答
  • 0 关注
  • 127 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信