Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Python字符串分解为其字符_Python_Regex_String - Fatal编程技术网

将Python字符串分解为其字符

将Python字符串分解为其字符,python,regex,string,Python,Regex,String,我想将Python字符串分解为字符 sequenceOfAlphabets = list( string.uppercase ) 工作 然而,为什么不呢 sequenceOfAlphabets = re.split( '.', string.uppercase ) 工作 我得到的所有内容都是空的,尽管预期的元素计数是空的,因为split使用的分隔符没有出现在结果列表中。这使得它可以像这样使用: re.split(',', "foo,bar,baz") ['foo', 'bar', 'baz'

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

sequenceOfAlphabets = list( string.uppercase )
工作

然而,为什么不呢

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


我得到的所有内容都是空的,尽管预期的元素计数是空的,因为split使用的分隔符没有出现在结果列表中。这使得它可以像这样使用:

re.split(',', "foo,bar,baz")
['foo', 'bar', 'baz']

此外,您会发现分割代码的结果列表实际上包含一个额外的元素,因为分割返回的分隔符比找到的分隔符多一个。上面有两个逗号,因此它返回一个三元素列表。

因为split使用的分隔符不会出现在结果列表中。这使得它可以像这样使用:

re.split(',', "foo,bar,baz")
['foo', 'bar', 'baz']

此外,您会发现分割代码的结果列表实际上包含一个额外的元素,因为分割返回的分隔符比找到的分隔符多一个。上面有两个逗号,因此它返回一个三元素列表。

来自文档:

如果在中使用了捕获括号 模式,然后是所有组的文本 在模式中,也返回为 结果列表的一部分

另请注意:

如果数据库中有捕获组 分隔符,并且它在开始时匹配 对于字符串,结果将开始 使用空字符串。同样的道理 在字符串的末尾


因此,请改用
re.split(“(”),string.uppercase)[1:-1]

来自文档:

如果在中使用了捕获括号 模式,然后是所有组的文本 在模式中,也返回为 结果列表的一部分

另请注意:

如果数据库中有捕获组 分隔符,并且它在开始时匹配 对于字符串,结果将开始 使用空字符串。同样的道理 在字符串的末尾


因此,使用
re.split(“(”),string.uppercase)[1:-1]

The
匹配每个字符,并且
re.split
返回所有不匹配的内容,这就是为什么会得到空列表

使用
list
通常是处理类似问题的方法,但是如果要使用正则表达式,只需使用
re.findall

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

这将为您提供
['A'、'B'、'C'、…、'Z']
'.
匹配每个字符,并且
re.split
返回所有不匹配的内容,这就是为什么您会得到空列表的原因

使用
list
通常是处理类似问题的方法,但是如果要使用正则表达式,只需使用
re.findall

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

这应该会给你一个参考,这同样适用于:

sequenceOfAlphabets = [a for a in string.uppercase]

…但这正是list()所能做的,因此我认为它不会更快(我可能错了)。

仅供参考,这同样有效:

sequenceOfAlphabets = [a for a in string.uppercase]

…但这正是list()所能做的,所以我认为它不会更快(我可能错了)。

如果你能同时使用内置函数和正则表达式,那么内置方法通常会更快、更清晰


regex世界是一个由曲折的小段落组成的迷宫,里面充斥着几乎所有真理的传递者,比如“The.”匹配每一个字符“。。。确实如此,但仅当您使用re.DOTALL标志时。这些信息不会巧妙地隐藏在文件的精细印刷中;这是“特殊角色”的第一个条目:

“。
(点。)在默认模式下,它匹配除换行符以外的任何字符。如果指定了DOTALL标志,则该标志将匹配包括换行符在内的任何字符

>>> import re
>>> re.findall(".", "fu\nbar")
['f', 'u', 'b', 'a', 'r']
>>>

如果您可以同时使用内置函数和正则表达式来执行某些操作,那么内置方法通常会更快、更清晰


regex世界是一个由曲折的小段落组成的迷宫,里面充斥着几乎所有真理的传递者,比如“The.”匹配每一个字符“。。。确实如此,但仅当您使用re.DOTALL标志时。这些信息不会巧妙地隐藏在文件的精细印刷中;这是“特殊角色”的第一个条目:

“。
(点。)在默认模式下,它匹配除换行符以外的任何字符。如果指定了DOTALL标志,则该标志将匹配包括换行符在内的任何字符

>>> import re
>>> re.findall(".", "fu\nbar")
['f', 'u', 'b', 'a', 'r']
>>>

您还可以创建一个空集并使用update方法,如下所示:

destroy_string = set()
destroy_string.update('Stack Overflow')
destroy_string
{'k', ' ', 'S', 'c', 'v', 'o', 'r', 't', 'w', 'e', 'f', 'O', 'l', 'a'}

尽管它将变得无序,并且重复项将丢失在集合中,但是,这仍然是将字符串分解为单个成员集合的有效方法。

您也可以创建一个空集并使用update方法,如下所示:

destroy_string = set()
destroy_string.update('Stack Overflow')
destroy_string
{'k', ' ', 'S', 'c', 'v', 'o', 'r', 't', 'w', 'e', 'f', 'O', 'l', 'a'}

尽管如此,它将变得无序,重复项将在集合中丢失,但是,这仍然是将字符串分解为单个成员集合的有效方法。

这仍然会产生不必要的空字符。我在回答中提到了相关文档。它始终如此,因此它们很容易移除。这就是说,只需使用
re.split(“(”),string.uppercase)[1:-1]
即可将它们去掉。更新我的答案。这仍然会给出不必要的空字符。我在回复中提到了相关文档。它始终如此,因此它们很容易移除。这就是说,只需使用
re.split(“(”),string.uppercase)[1:-1]
即可将它们去掉。更新我的答案。如果使用
list
进行简单转换,您为什么要使用正则表达式?在需要使用所获得的理解时。自从这个问题出现以来,我们有没有关于哪个更快、速度多快的数字?如果使用
list
进行简单转换,为什么要使用regex?在需要使用理解的时候。自从这个问题被提出来后,我们有没有数据表明哪个更快,增长了多少?约翰,这是一个非常准确、写得很好的答案。坚持下去!只有当我们对提取嵌入的换行符感兴趣时,这才是错误的。除此之外,它还是精确的!"