簡體   English   中英

Python:在使用str.lower時,如何避免使用小寫字符串中的特定單詞

[英]Python: How can i avoid specific word in string from lowercasing while using str.lower

我剛接觸python

我有一個字符串列表作為follws

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

我想小寫每個列表項值如下

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

即我想$(OutDir)防止$(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()

如果你對正則表達過敏...

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM