入力文字列の構造に基づく実用的なソリューションを次に示します。
str="suleman, h (2001) Some Random Piece Of Junk, Journal of Junk, ACM, pp1-100, 2000"
parts=str.split(',')
newparts=[]
for chunk in parts[:-3]:
newparts.append(chunk.title())
newparts.append(parts[3].upper())
for chunk in parts[4:]:
newparts.append(chunk.lower())
newstr=",".join(newparts)
print newstr
実行結果:
11:41 ~ $ python test.py
Suleman, H (2001) Some Random Piece Of Junk, Journal Of Junk, ACM, pp1-100, 2000
私は当初、.title() が必要な大文字化を提供すると考えていましたが、ACM のように完全に大文字にする必要がある用語と、'pp1-100 のように完全に小文字にする必要がある部分があります。 '。そこで、より構造化されたアプローチを採用しました。これは複合参照では機能しないことに注意してください。参照の適切な大文字化を処理するには、特定の python ライブラリが必要だと思います。ただし、ルールが複雑になる可能性があり、挿入が常にクリーンであるとは限らないため、適切な処理は保証されません。
上記で詳しく説明したアプローチでは、カンマで区切られた最後の 3 つの用語は特殊なケースであると想定していますが、それ以前はすべて TitleCase ルールに従います。
提案:
入力フィールドを防御的にコーディングして、特定の方法で大文字にしたい情報がグループ化されるようにします。つまり、TitleCase フィールド、ALL CAPS フィールド、ALL LOWER フィールド、および LEAVE-AS-IS フィールドです。
次に、コードで適切に処理します。