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 库来处理正确的大写以供参考。但是,由于规则可能很复杂并且插入并不总是干净的,因此无法保证正确处理。

我在上面详述的方法假定最后三个逗号分隔的术语是特殊情况,但之前的所有内容都遵循 TitleCase 规则。

建议:

对输入字段进行防御性编码,以便将您希望以某种方式大写的信息组合在一起。即,TitleCase 字段、ALL CAPS 字段、ALL LOWER 字段和 LEAVE-AS-IS 字段。

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

于 2013-03-29T18:28:53.923 回答