Thay thế mọi chữ cái viết hoa 'L' trong phần đã cho bằng một khoảng trống cộng với chữ cái đó là "L". Chúng ta có thể thực hiện việc này bằng cách sử dụng tính năng hiểu danh sách hoặc chúng ta có thể xác định một hàm để làm điều đó như sau.
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']
Nếu bạn chọn đi theo một chức năng, đây là cách thực hiện.
def splitAtUpperCase(text):
result = ""
for char in text:
if char.isupper():
result += " " + char
else:
result += char
return result.split()
Trong trường hợp của ví dụ đã cho:
print(splitAtUpperCase('TheLongAndWindingRoad'))
>>>['The', 'Long', 'A', 'N', 'D', 'Winding', 'Road']
Nhưng hầu hết thời gian chúng ta tách một câu thành các chữ cái viết hoa, thường là trường hợp chúng ta muốn duy trì các chữ viết tắt thường là một dòng chữ hoa liên tục. Đoạn mã dưới đây sẽ hữu ích.
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']
Cảm ơn.