重新格式化用户输入

时间:2013-03-29 17:48:23

标签: python string python-3.x user-input

我想创建一个程序,将用户输入的字符串重新格式化为更可接受的字符串。

字符串应采用以下格式:

  

作者名单(年份),其他信息

例如,如果用户输入:

"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."

1 个答案:

答案 0 :(得分: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字段。

然后在代码中进行相应的处理。