1

私はpythonが初めてです

次のような文字列のリストがあります

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

以下のように各リスト項目の値を小文字にしたい

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

つまり、、、が小文字 にならないよう$(ProjectDir)にしたい $(OutDir)$(IntDir)

4

2 に答える 2

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()
于 2012-08-01T09:35:54.743 に答える
2

正規表現にアレルギーがある場合...

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
于 2012-08-01T09:40:44.190 に答える