我一直在玩这个代码,我试图阅读没有空格的文本字符串。代码需要通过使用正则表达式标识所有大写字母来分隔字符串。但是我似乎无法显示大写字母。
import re
mystring = 'ThisIsStringWithoutSpacesWordsTextManDogCow!'
wordList = re.sub("[^\^a-z]"," ",mystring)
print (wordList)
答案 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()