这是一个有效的解决方案,基于输入字符串的结构:
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 字段。
然后在代码中进行相应处理。