我想创建一个程序,将用户输入的字符串重新格式化为更可接受的字符串。
字符串应采用以下格式:
作者名单(年份),其他信息
例如,如果用户输入:
"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."
答案 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字段。
然后在代码中进行相应的处理。