我想将Python字符串分解为其字符。
sequenceOfAlphabets = list( string.uppercase )
作品。
然而,为什么不
sequenceOfAlphabets = re.split( '.', string.uppercase )
工作?
所有我得到的都是空的,虽然预计会有元素数
答案 0 :(得分:4)
'.'
匹配每个字符,re.split
返回未匹配的所有内容,这就是您获取空列表的原因。
使用list
通常是处理这类事情的方法,但如果你想使用正则表达式,只需使用re.findall
sequenceOfAlphabets = re.findall( '.', string.uppercase )
那应该给你['A', 'B', 'C', .... ,'Z']
答案 1 :(得分:2)
因为split使用的分隔符不会出现在结果列表中。这允许它像:
一样使用re.split(',', "foo,bar,baz")
['foo', 'bar', 'baz']
此外,您会发现拆分代码中的结果列表实际上包含一个额外元素,因为split返回的结果比找到的分隔符数多一个。上面有两个逗号,所以它返回一个三元素列表。
答案 2 :(得分:1)
如果您可以使用内置函数和正则表达式执行某些操作,那么内置方法通常会更快,更清晰。
正则表达世界是一个曲折的小段落的迷宫,由几乎真理的传播者组成,如“”,“The”。匹配每个字符“”“...它所做的,但只有当你使用re.DOTALL标志时。这些信息并未巧妙地隐藏在文档的细则中;它就在那里作为“特殊字符”的第一个条目:
''
(点。)在默认模式下,它匹配除换行之外的任何字符。如果指定了DOTALL标志,则匹配包括换行符在内的任何字符。
>>> import re
>>> re.findall(".", "fu\nbar")
['f', 'u', 'b', 'a', 'r']
>>>
答案 3 :(得分:0)
只是一个FYI,这也有效:
sequenceOfAlphabets = [a for a in string.uppercase]
...但是这确实与list()完全相同,所以我认为它不会更快(我可能是错的)。
答案 4 :(得分:0)
您也可以创建一个空集并使用更新方法,如下所示:
destroy_string = set()
destroy_string.update('Stack Overflow')
destroy_string
{'k', ' ', 'S', 'c', 'v', 'o', 'r', 't', 'w', 'e', 'f', 'O', 'l', 'a'}
尽管它会变得无序并且重复项会在集合中丢失,但是,这仍然是将字符串分解为其单个成员的集合的有效方法。
答案 5 :(得分:-1)
来自文档:
如果使用捕获括号 模式,然后是所有组的文本 在模式中也返回为 结果列表的一部分。
另请注意:
如果有捕获组 分隔符,它在开始时匹配 字符串,结果将开始 用空字符串。同样的 为字符串的结尾。
所以,请改用re.split( '(.)', string.uppercase)[1:-1]
。