我有文字:
'SMThingAnotherThingBIGCapitalLetters'
,我希望输出为:
'SM Thing Another Thing BIG Capital Letters'
现在我的正则表达式:
r"(\w)([A-Z])", r"\1 \2"
当我彼此之间没有2个大写字母时,此方法有效。
我的正则表达式的输出:
'S MThing Another Thing B I G Capital Letters'
因此,当下一个字母较小时,我需要使用正则表达式在大写字母之前插入一个空格。
有人有主意吗?
答案 0 :(得分:3)
您应谨慎使用正则表达式。它们可以轻松地转变为没人能理解的巨大怪物。您可以使用简单的循环而不是regexp来解决问题:
a = 'SMThingAnotherThingBIGCapitalLetters'
result = a[0]
for i, letter in enumerate(a):
if letter.isupper() and (result[-1].islower() or a[i+1].islower()):
result += ' '
if i: result += letter
result
'SM Thing Another Thing BIG Capital Letters'
答案 1 :(得分:2)
您可以将交替使用2个捕获组并替换为group1 group2 space
之类的r"\1\2 "
([A-Z])(?=[A-Z][a-z])|([a-z])(?=[A-Z])
说明
([A-Z])
在第1组中捕获首都A-Z (?=[A-Z][a-z])
正向前进,断言右边是大写和小写的a-z |
或([a-z])
在第2组中捕获小写字母a-z (?=[A-Z])
正向前进,断言右边是大写字母A-Z