将Python字符串分解为其字符

时间:2010-06-02 11:35:00

标签: python regex string

我想将Python字符串分解为其字符。

sequenceOfAlphabets = list( string.uppercase )

作品。

然而,为什么不

sequenceOfAlphabets = re.split( '.', string.uppercase )

工作?

所有我得到的都是空的,虽然预计会有元素数

6 个答案:

答案 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]