Python 在非连续大写字母上拆分字符串

Python 在非连续大写字母上拆分字符串,python,regex,string,split,capitalization,Python,Regex,String,Split,Capitalization,我试图用大写字母拆分字符串,但我不想拆分两个连续的大写字母 所以现在我要做的是: my_string == "TTestStringAA" re.findall('[a-zA-Z][^A-Z]*', my_string) >>> ['T', 'Test', 'String', 'A', 'A'] 但我想要的结果是: >>> ['TTest', 'String', 'AA'] 这个问题有一个干净简单的解决方案吗 谢谢 我相信[A-Z]+[

我试图用大写字母拆分字符串,但我不想拆分两个连续的大写字母

所以现在我要做的是:

my_string == "TTestStringAA"
re.findall('[a-zA-Z][^A-Z]*', my_string)
>>> ['T', 'Test', 'String', 'A', 'A']
但我想要的结果是:

>>> ['TTest', 'String', 'AA']
这个问题有一个干净简单的解决方案吗


谢谢

我相信
[A-Z]+[A-Z]*
符合您的要求:

>>> re.findall(r'[A-Z]+[a-z]*', my_string)
['TTest', 'String', 'AA']

下面的正则表达式将返回正确的结果

[a-z]*[A-Z]+[a-z]*|[a-z]+$
测试用例:

tests = ['a', 'A', 'aa', 'Aa' 'AaAaAAAaAa', 'aTTestStringAA']
regex = re.compile(r'[a-z]*[A-Z]+[a-z]*|[a-z]+$')
for test in tests:
    print('{} => {}'.format(test, re.findall(regex, test)))

使用
re.split

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

这对我来说很有效,但我做了一些小改动,因为我发现这个解决方案在开始时没有保留小写字母,数字也没有正确分割,所以最后我提出了这个解决方案:r'[A-Z0-9]*[A-z]*'
--------------------------------------------------------------------------------
  (?<=                     look behind to see if there is:
--------------------------------------------------------------------------------
    [a-z]                    any character of: 'a' to 'z'
--------------------------------------------------------------------------------
  )                        end of look-behind
--------------------------------------------------------------------------------
  (?=                      look ahead to see if there is:
--------------------------------------------------------------------------------
    [A-Z]                    any character of: 'A' to 'Z'
--------------------------------------------------------------------------------
  )                        end of look-ahead
import re
pattern = r"(?<=[a-z])(?=[A-Z])"
test = "TTestStringAA"
print(re.split(pattern, test))
['TTest', 'String', 'AA']