Python Downcase是特定案例的列表,但不包括其他案例

Python Downcase是特定案例的列表,但不包括其他案例,python,python-3.x,Python,Python 3.x,我目前有一个字符串列表(由字母、大小写、数字和特殊字符组成),它们的大小写格式不正确。我试图实现的目标是对具有以下格式的列表元素的所有实例进行大小写: ['ALLUPPERCASE', 'ALL_UPPER_WITH_UNDERSCORES', 'ALL-UPPER-EXCEPT (text here)'] 用外行的术语来说,所有大写或全大写加下划线''.'或连字符'-'(可以在同一个元素中同时加下划线和连字符,或者全大写,但结尾有空格,然后是一个小写但在括号中的短语除外) 我希望列表中所有其

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

['ALLUPPERCASE', 'ALL_UPPER_WITH_UNDERSCORES', 'ALL-UPPER-EXCEPT (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)

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

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

这是否为您提供了正确的输出

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)

使用一个正则表达式,该正则表达式与您想要的模式匹配

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]

regexp匹配一系列大写字母、下划线和连字符,后跟空格和括号中的任何内容。

您能提供一些示例以便我们更好地理解这个问题吗?@snnguyen示例在代码段中。单个大写字符会发生什么情况?如果有单个大写字符case character那么该角色应该被下格。@Barmar到底是什么问题?你试过什么,做过什么研究吗?您好,这一切都正常,感谢您的快速响应。我意识到我没有提到可能的案例场景。如果我还想下格一个实例,我会在表达式中添加什么内容,如下所示:
'THRESHOLD\u BAND123'->'THRESHOLD\u BAND123'
@Barmar@ChandlerCree,最简单的方法是检查小写字母,这也适用于您提到的其他场景。请查看我的答案。您可以使用A-Z将
\d
添加到字符类。@ChandlerCree这也提供了正确的输出,谢谢所有实例都是为了提高效率。@HeikeThanks,在不导入re的情况下也可以运行,将对此进行测试,但是我的脚本中已经有re,因此处理导入问题不是太大。@AustinUpon测试此案例时,它似乎对我需要完成的工作非常有用。也不需要导入regex。感谢这个@Austin@ChandlerCree如果答案有助于你接受答案并投票。谢谢是不必要的。评论应用于澄清或建议。