0

ファイル名に含まれるテキストに基づいてPDFをマージするスクリプトを設定しています。ここでの問題は、「ヴァイオリンI」は「ヴァイオリンII」にも含まれ、「アルトサックスI」は「アルトサックスII」にも含まれているということです。tempListに「ViolinI」からのエントリのみが含まれ、「Violin II」が除外されるように、またはその逆に設定するにはどうすればよいですか?

pdfList = ["01 Violin I.pdf", "02 Violin I.pdf","01 Violin II.pdf", "02 Violin II.pdf",  ]
instruments = ["Soprano", "Tenor", "Violin I", "Violin II", "Viola", "Cello", "Contrabass", "Alto Saxophone I", "Alto Saxophone II", "Tenor Saxophone", "Baritone Saxophone"]


# create arrays for each instrument that can be used for merging/organization
def organizer():
    for fileName in pdfList:
        for instrument in instruments:
            tempList = []
            if instrument in fileName:
                tempList.append(fileName)
        print tempList


print pdfList
organizer()
4

2 に答える 2

3

サブストリングを含めないようにする1つの方法は、次のような正規表現を使用することです。

import re

pdfList = ["01 Violin I.pdf", "02 Violin I.pdf","01 Violin II.pdf", "02 Violin \
II.pdf",  ]
instruments = ["Soprano", "Tenor", "Violin I", "Violin II", "Viola", "Cello", "\
Contrabass", "Alto Saxophone I", "Alto Saxophone II", "Tenor Saxophone", "Barit\
one Saxophone"]

# create arrays for each instrument that can be used for merging/organization   
def organizer():
    for fileName in pdfList:
        tempList = []
        for instrument in instruments:
            if re.search(r'\b{}\b'.format(instrument), fileName):
                tempList.append(fileName)
        print tempList

print pdfList
organizer()

これにより、検索語がでラップ\bされ、最初と最後が単語の境界にある場合にのみ一致するようになります。また、おそらく明白ですが、指摘する価値があります。これにより、楽器名も正規表現の一部になります。したがって、正規表現のメタ文字でもある文字を使用する場合は、そのように解釈されることに注意してください(現在はそうではありません)。より一般的なスキームでは、そのような文字を見つけて適切にエスケープするためのコードが必要になります。

于 2013-03-23T16:28:22.980 に答える
1

この変更を試してください:

...
if instrument+'.pdf' in fileName:
...

これはすべての状況をカバーしますか?

于 2013-03-23T16:25:50.630 に答える