Python:如何在使用 str.lower 时避免字符串中的特定单词小写

标签 python

我是 python 新手

我有一个字符串列表如下

mylist=["$(ProjectDir)Dir1\Dest1","$(OutDir)Dir2\Dest2","$(IntDir)Dir2\Dest2"]

我想将每个列表项值小写如下

mylist=["$(ProjectDir)dir1\dest1","$(OutDir)dir2\dest2","$(IntDir)dir3\dest3"]

即我想防止$(ProjectDir),$(OutDir),$(IntDir)小写

最佳答案

这个想法很简单。您使用描述不需要转换的部分的正则表达式拆分字符串,然后仅转换其偶数部分,然后将它们连接回去。

>>> import re
>>> mylist=["$(ProjectDir)Dir1\Dest1","$(OutDir)Dir2\Dest2","$(IntDir)Dir2\Dest2"]
>>> print ["".join([s if i%2 else s.lower()  for (i,s) in enumerate(re.split('(\$\([^)]*\))', x))]) for x in mylist]
['$(ProjectDir)dir1\\dest1', '$(OutDir)dir2\\dest2', '$(IntDir)dir2\\dest2']

这里最主要的是:

[ "".join([
     s if i%2 else s.lower()
     for (i,s) in enumerate(re.split('(\$\([^)]*\))', x))])
   for x in mylist ]

你遍历列表 mylist 并且对于每个 x 产生它的修改版本:

[ ... for x in mylist ]

您使用此操作转换每个 x:

"".join([
     s if i%2 else s.lower()
     for (i,s) in enumerate(re.split('(\$\([^)]*\))', x))]

这意味着:将字符串拆分为必须转换(偶数)和不能转换(奇数)的部分。

例如:

>>> re.split('(\$\([^)]*\))', x)
['', '$(ProjectDir)', 'Dir1\\Dest1']

然后枚举它们并转换所有偶数部分:

>>> print list(enumerate(re.split('(\$\([^)]*\))', x)))
[(0, ''), (1, '$(ProjectDir)'), (2, 'Dir1\\Dest1')]

如果一个部分是偶数或奇数,你使用这个 if 检查:

 s if i%2 else s.lower()

关于Python:如何在使用 str.lower 时避免字符串中的特定单词小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11756376/

相关文章:

python - 在 python 中用另一个字典更新一个字典

python - 基于组和前一行 pandas 的前向填充 (ffill)

带有(子)进程覆盖率报告的 python unittest

python - 写入 csv 中的多列

python - 比较两个 Pandas 数据框

python - 使用 Python 通过 SSH 下载文件

python - 如何制作函数装饰器并将它们链接在一起?

python - 仅当单独列中的差异在 [-n, +n] 范围内时,才在公共(public)列上加入两个 DataFrame

python - 转换为 UTC 时间戳

python - 在 Python 中自动化 Selenium 测试