2013-03-29 82 views
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." 
+3

[你有什麼嘗試?](http://mattgemmell.com/2008/12/08/what-have-you-tried/) –

+2

你能描述一下這個轉換中涉及的規則嗎?如果你不能,而你所擁有的只是「那麼,它看起來就是第二種方式,不是嗎?」,你唯一的希望就是編寫某種AI(例如訓練神經網絡)。但是如果你有規則,把它們寫下來,找到並解決它們之間的任何矛盾或訂購要求,那麼它應該很容易變成代碼。 – abarnert

回答

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庫來處理引用的正確大小寫。但是,由於規則可能比較複雜,插入不總是很乾淨,所以無法保證正確的處理。

上面詳細介紹的方法假定最後三個逗號分隔的詞語是特殊情況,但以前的所有內容都遵循TitleCase規則。

建議:

防守碼的輸入字段,以便您想要的信息以某種方式予以資本化組合在一起。即,TitleCase字段,ALL CAPS字段,ALL LOWER字段和LEAVE-AS-IS字段。

然後在代碼中相應地處理。