📜  Python | 从字符串中分割多个字符

📅  最后修改于: 2020-07-30 05:24:46             🧑  作者: Mango

在编码或提高编程技巧时,您肯定一定遇到过许多情况,在这些情况下,您希望.split()在Python中使用它们,而不是只拆分一个字符,而是一次拆分多个字符。考虑以下示例:

"mangodoc, is an-awesome! website"

.split()在上面使用会导致

['mangodoc, ', 'is', 'an-awesome!', 'website']

而预期的结果应该是

['mangodoc', 'is', 'an', 'awesome', 'website']

在本文中,我们将探讨实现相同目标的一些方法。

使用re.split()

这是一次拆分多个字符的最有效且最常用的方法。为此,它使用了regex(正则表达式)。

# Python3代码演示使用re.split()在字符串中拆分运算符的工作方式  
  
import re 
  
# 初始化字符串 
data = "mangodoc, is_an-awesome ! website"
  
# 打印原始字符串   
print("原始字符串是 : " + data)  
  
# 使用re.split()在字符串中分割字符  
res = re.split(', |_|-|!', data) 
  
# 打印结果   
print("执行拆分功能后的列表 : " + str(res))  

输出:

原始字符串是 : mangodoc, is_an-awesome ! website
执行拆分功能后的列表 : [‘mangodoc’, ‘is’, ‘an’, ‘awesome ‘, ‘ website’]

该行re.split(', |_|-|!', data)告诉Python来分割可变数据上的字符:_。符号“ “表示或。

正则表达式中有一些符号被视为特殊符号并具有不同的功能。如果要分割这样的符号,则需要使用“ \ “(反斜杠)对其进行转义。使用特殊字符之前需要转义的列表:

. \ + * ? [ ^ ] $ ( ) { } = !  | : -

例如:

import re 
newData = "mangodoc, is_an-awesome ! app + too"
  
# 要分割“ +",请使用反斜杠 
print(re.split(', |_|-|!|\+', newData)) 

输出:

['mangodoc', ' is', 'an', 'awesome', ' app', 'too']

 

使用re.findall()

这是一种比较神秘的形式,但可以节省时间。它还像上面一样使用正则表达式,但是.split()它使用而不是方法来代替.findall()。此方法查找所有匹配的实例,并在列表中返回每个实例。当您不知道要分割的确切字符时,最好使用这种分割方式。 

# Python3代码演示使用re.findall()在字符串中拆分运算符的工作方式  
import re 
  
  
# 初始化字符串   
data = "This, is - another : example?!"
  
# 打印原始字符串   
print("原始字符串是 : " + data)  
  
# 使用re.findall()拆分字符串中的字符  
res = re.findall(r"[\w']+", data) 
  
# 打印结果   
print("执行拆分功能后的列表 : " + str(res)) 

输出: 

原始字符串是 : This, is – another : example?!
执行拆分功能后的列表 : [‘This’, ‘is’, ‘another’, ‘example’]

此处的关键字[\w']+表示它将找到一个或多个字母或下划线(_)的所有实例,并将它们返回到列表中。
注意: [\w']+下划线(_)不会同时搜索字母和下划线。


例如: 

import re 
testData = "This, is - underscored _ example?!"
print(re.findall(r"[\w']+", testData)) 

输出: 

['This', 'is', 'underscored', '_', 'example']

使用replace()和split()

这是进行拆分的新手方式。它不使用正则表达式,效率低下,但仍然值得一试。如果知道要分割的字符,只需用空格替换它们,然后使用.split()

# Python代码演示   
# 分割字符串  
  
# 初始字符串 
data = "Let's_try, this now"
  
# 打印原始字符串   
print("原始字符串是 : " + data)  
  
# 使用replace()和split()在字符串中分割字符   
res = data.replace('_', ' ').replace(', ', ' ').split() 
  
# 打印结果 
print("执行拆分功能后的列表 : " + str(res))  

输出:

原始字符串是 : Let’s_try, this now
执行拆分功能后的列表 : [“Let’s", ‘try’, ‘this’, ‘now’]

正则表达式关于字符描述的表格:

速记字符类 代表
\ d 0到9之间的任何数字
\ D 不是0到9之间的数字的任何字符
\ w 任何字母,数字或下划线字符
\ W 不是字母,数字或下划线字符的任何字符
\ s 任何空格,制表符或换行符
\ S 不是空格,制表符或换行符的任何字符