当且仅当前一个字母不是大写字母时,才如何在大写字母前插入空格?

时间:2019-06-06 14:28:27

标签: python regex

我有文字:

'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'

因此,当下一个字母较小时,我需要使用正则表达式在大写字母之前插入一个空格。

有人有主意吗?

2 个答案:

答案 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

Regex demo