【发布时间】:2015-10-16 05:44:16
【问题描述】:
差不多了,但是我发现我的正则表达式有几个漏洞,可以将 CamelCase 转换为 Spaced Sentence Case。它在大多数情况下都很好(双关语),但它在第一个连字符上挂断了。我不知道为什么。
import re
# ---------------------------------------------------------
def camelCaseToSpacedTitleCase(u):
# add spaces
regex = re.sub("(.)([A-Z][a-z-]+)", r"\1 \2", u)
# make title case
regex = re.sub("([a-z0-9])([A-Z])", r"\1 \2", regex)
# keep CAPITALISED words
regex = re.sub("(^|\s)(\S)", r"\1" + r"\2".upper(), regex)
# keep Mc and Mac
regex = re.sub("(Mc|Mac)(\s)", r"\1", regex)
# keep digits
regex = re.sub("([a-z]+)([0-9]+\s)", r"\1 \2", regex)
# keep I or A
regex = re.sub("(\sA|\sI)([A-Z])([a-z]*)", r"\1 \2\3", regex)
# remove double whitespaces
regex = re.sub("\s{2,32}", r" ", regex)
return regex
test1 = "TheAmazingSpider-Man"
test2 = "WeAreSexBob-Omb"
test3 = "SR-128 SomethingSomething"
test4 = "Ex-Voto - Monitor"
test5 = "FergusMcNeilEyeContact"
test6 = "It'sABanana"
test7 = "HouseOf1000Zombies!"
print (camelCaseToSpacedTitleCase(test1))
print (camelCaseToSpacedTitleCase(test2))
print (camelCaseToSpacedTitleCase(test3))
print (camelCaseToSpacedTitleCase(test4))
print (camelCaseToSpacedTitleCase(test5))
print (camelCaseToSpacedTitleCase(test6))
print (camelCaseToSpacedTitleCase(test7))
我希望看到
"The Amazing Spider-Man"
"We Are Sex Bob-Omb"
"SR-128 Something Something"
"Ex-Voto - Monitor"
"Fergus McNeil Eye Contact"
"It's A Banana"
"House Of 1000 Zombies!"
出于上述原因,我想避免使用 .titlecase()
【问题讨论】:
-
你看到了什么?
-
这是一种在单个正则表达式中完成所有操作的低效方法。不确定它是否符合所有标准(但似乎符合您分享的所有案例),我强烈建议不要使用它,哈哈:regex101.com/r/mB1lN8/1
标签: python regex camelcasing