字符串在大写字母上拆分但保留大写子字符串

时间:2016-02-18 18:10:19

标签: python

说我有:

myString = 'myPERLPythonJavaScriptJavaTextSample'

我想将其拆分为:

['my', 'PERL', 'Python', 'Java', 'Script', 'Java', 'Text', 'Sample']

这样做的PYTHONIC方式是什么?

我应该更清楚:-(。这是我追求的另一个例子:

myString2 = [' myAbcDEFGhijklMNOP']

应该返回:

[&#39;我的&#39;,&#39; Abc&#39;,&#39; DEF&#39;,&#39; Ghijkl&#39;,&#39; MNOP&#39;] < / p>

&#39; ... ... DEFGh&#39;成为&#39; ....&#39;,&#39; DEF&#39;,&#39; Gh ...&#39;因为&#39; G&#39;是大写字母串的最后一个字符&#39; DEFG&#39;。也就是说,如果有多个连续的大写字母,我们会在倒数第二个大写字母处分开。这不适用于最后一个子字符串:return&#39; MNOP&#39;原样。

3 个答案:

答案 0 :(得分:1)

如评论中所述,您无法准确地了解这一点,但您可以接近并对其进行后处理:

myString = 'myPERLPythonJavaScriptJavaTextSample'

ll = []
val = ''
for ch in myString:
    if ch.isupper():
        ll.append(val)
        val = ''
    val += ch

print ll
>> ['my', 'P', 'E', 'R', 'L', 'Python', 'Java', 'Script', 'Java', 'Text']

答案 1 :(得分:1)

尝试使用正则表达式:

import re
myString = 'myPERLPythonJavaScriptJavaTextSample'
regex = '([a-z]+)(?=[A-Z])|([A-Z][a-z]+)'
ll = filter(None, re.split(regex, myString))
print ll

返回: ['my','PERL','Python','Java','Script','Java','Text','Sample']

enter link description here

答案 2 :(得分:1)

使用正则表达式将单词与空格分开,然后拆分:

import re 

myString = 'myPERLPythonJavaScriptJavaTextSample'
myString = re.sub(r'((?<=[a-z])[A-Z]|(?<!\A)[A-Z](?=[a-z]))', r' \1', myString)
result = myString.split()
print result

返回:['my','PERL','Python','Java','Script','Java','Text','Sample']

相关问题