繁体   English   中英

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

[英]How do I insert space before capital letter if and only if previous letter is not capital?

我有文字:

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

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

有人有主意吗?

您应该谨慎使用正则表达式。 它们可以轻松地转变为没人能理解的巨大怪物。 您可以使用简单的循环而不是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'

您可以对2个捕获组使用交替,并用r"\\1\\2 "这样的group1 group2 space替换

([A-Z])(?=[A-Z][a-z])|([a-z])(?=[A-Z])

说明

  • ([AZ])捕获第1组的首字母AZ
  • (?=[AZ][az])正向向前看,断言右边的是大写字母和小写字母az
  • | 要么
  • ([az])捕获组2中的小写字母az
  • (?=[AZ])正向向前看,断言右边是大写AZ

正则表达式演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM