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

2024-10-11 16:25:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有文本:

'SMThingAnotherThingBIGCapitalLetters'

我希望输出是:

'SM Thing Another Thing BIG Capital Letters'

我的正则表达式现在:

r"(\w)([A-Z])", r"\1 \2"

当我没有两个大写字母在一起时,这个方法就起作用了。你知道吗

我的正则表达式的输出:

'S MThing Another Thing B I G Capital Letters'

所以,当下一个字母很小时,我需要正则表达式在大写字母前插入一个空格。你知道吗

有人有主意吗?你知道吗


Tags: 方法文本字母another大写字母主意sm空格
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

你应该小心使用正则表达式。它们很容易变成无人能理解的巨大怪物。您可以使用简单循环而不是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'

相关问题 更多 >

    热门问题