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

我目前有一个大小写格式不正确的字符串列表(由字母、大小写、数字和特殊字符组成)。我试图实现的目标是对具有以下格式的列表元素的所有实例进行小写:


['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)


长风秋雁
浏览 129回答 3
3回答

慕雪6442864

使用与您想要小写的模式匹配的正则表达式。import redef maybe_downcase(s):    if re.match(r'^[A-Z_-]+(?:\s\(.*\))?$', s):        return s.lower()    else:        return soutput = [maybe_downcase(x) for x in L1]正则表达式匹配一系列大写字母、下划线和连字符,可选地后跟空格和括号中的任何内容。

忽然笑

您可以执行您在问题中提到的类似方法,但检查字符串中出现的任何小写字母,而不是匹配大写字母(没有导入):[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)']         

慕田峪9158850

这会给你正确的输出吗?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_bandthreshold_band (copy)tickerticker-twoTitle C (copy)Title C (copy) (copy)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python