0

ユーザーが入力した文字列をより受け入れやすい文字列に再フォーマットするプログラムを作成したいと考えています。

文字列は次の形式にする必要があります。

著者一覧(年) タイトル、その他の情報

たとえば、ユーザーが次のように入力した場合:

"suleman, h (2001) Some Random Piece Of Junk, Journal of Junk, ACM, pp1-100, 2000"

私のプログラムは以下を返すはずです:

"Suleman, H (2001) Some random piece of junk, Journal of Junk, ACM, pp1-100, 2000."
4

1 に答える 1

1

入力文字列の構造に基づく実用的なソリューションを次に示します。

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 フィールドです。

次に、コードで適切に処理します。

于 2013-03-29T18:28:53.923 に答える