Remplacez chaque lettre majuscule «L» dans le donné par un espace vide plus cette lettre «L». Nous pouvons le faire en utilisant la compréhension de liste ou nous pouvons définir une fonction pour le faire comme suit.
s = 'TheLongANDWindingRoad ABC A123B45'
''.join([char if (char.islower() or not char.isalpha()) else ' '+char for char in list(s)]).strip().split()
>>> ['The', 'Long', 'A', 'N', 'D', 'Winding', 'Road', 'A', 'B', 'C', 'A123', 'B45']
Si vous choisissez de passer par une fonction, voici comment procéder.
def splitAtUpperCase(text):
result = ""
for char in text:
if char.isupper():
result += " " + char
else:
result += char
return result.split()
Dans le cas de l'exemple donné:
print(splitAtUpperCase('TheLongAndWindingRoad'))
>>>['The', 'Long', 'A', 'N', 'D', 'Winding', 'Road']
Mais la plupart du temps que nous divisons une phrase en majuscules, nous souhaitons généralement conserver des abréviations qui sont généralement un flux continu de lettres majuscules. Le code ci-dessous aiderait.
def splitAtUpperCase(s):
for i in range(len(s)-1)[::-1]:
if s[i].isupper() and s[i+1].islower():
s = s[:i]+' '+s[i:]
if s[i].isupper() and s[i-1].islower():
s = s[:i]+' '+s[i:]
return s.split()
splitAtUpperCase('TheLongANDWindingRoad')
>>> ['The', 'Long', 'AND', 'Winding', 'Road']
Merci.