将Python字符串分解为其字符
我想将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'
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?在需要使用理解的时候。自从这个问题被提出来后,我们有没有数据表明哪个更快,增长了多少?约翰,这是一个非常准确、写得很好的答案。坚持下去!只有当我们对提取嵌入的换行符感兴趣时,这才是错误的。除此之外,它还是精确的!"