分离连续的字符串Python

时间:2015-02-02 13:43:27

标签: python regex string list

我一直在玩这个代码,我试图阅读没有空格的文本字符串。代码需要通过使用正则表达式标识所有大写字母来分隔字符串。但是我似乎无法显示大写字母。

import re
mystring = 'ThisIsStringWithoutSpacesWordsTextManDogCow!'
wordList = re.sub("[^\^a-z]"," ",mystring)
print (wordList)

4 个答案:

答案 0 :(得分:3)

尝试:

re.sub("([A-Z])"," \\1",mystring).split()

这会在每个大写字母前面留出一个空格,并在这些空格上分开。

输出:

['This',
 'Is',
 'String',
 'Without',
 'Spaces',
 'Words',
 'Text',
 'Man',
 'Dog',
 'Cow!']

答案 1 :(得分:2)

作为sub的替代方法,您可以使用re.findall查找所有单词(以大写字母开头,后跟零或更多非大写字符),然后将它们连接在一起:< / p>

>>> ' '.join(re.findall(r'[A-Z][^A-Z]*', mystring))
'This Is String Without Spaces Words Text Man Dog Cow!'

答案 2 :(得分:0)

尝试

>>> re.split('([A-Z][a-z]*)', mystring)
['', 'This', '', 'Is', '', 'String', '', 'Without', '', 'Spaces', '', 'Words', '', 'Text', '', 'Man', '', 'Dog', '', 'Cow', '!']

这为您提供每个单词输出的单词。甚至!也被分开了。 如果您不想要额外的'',那么如果filter(lambda x: x != '', a)是上述命令的输出,则可以a删除它

>>> filter(lambda x: x != '', a)
['This', 'Is', 'String', 'Without', 'Spaces', 'Words', 'Text', 'Man', 'Dog', 'Cow', '!']

答案 3 :(得分:0)

不是正则表达式解决方案,但您也可以在普通代码中执行: - )

mystring = 'ThisIsStringWithoutSpacesWordsTextManDogCow!'
output_list = []
for i, letter in enumerate(mystring):
    if i!=index and letter.isupper():
            output_list.append(mystring[index:i])
            index = i
else:
    output_list.append(mystring[index:i])

现在谈论主题,这可能是你想要的东西吗?

mystring = re.sub(r"([a-z\d])([A-Z])", r'\1 \2', mystring)
# Makes the string space separated. You can use split to convert it to list
mystring = mystring.split()