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

2024-10-03 21:28:50 发布

您现在位置: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)小写


Tags: 字符串列表outdir项值dir1dir2mylistdest1
2条回答

这个想法很简单。您可以使用一个正则表达式来拆分字符串,该表达式描述了不需要转换的部分,然后只转换其偶数部分,然后将它们连接回去。你知道吗

>>> 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()

如果你对正则表达式过敏。。。你知道吗

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

## Lower case everything
mylist = [s.lower() for s in mylist]

## Revert the exclusions
for patt in exclusions:
    mylist = [s.replace(patt.lower(), patt) for s in mylist]

print mylist

相关问题 更多 >