line = 'asdf fjdk; afed, fjek,asdf, foo'
import re
# line = re.split(r'[;,\s]\s*',line) # print(line) # ['asdf', 'fjdk', 'afed', 'fjek', 'asdf', 'foo']
""" 当你使用 re.split() 函数时候,需要特别注意的是正则表达式中是否包含一个括 号捕获分组。如果使用了捕获分组,那么被匹配的文本也将出现在结果列表中。 """
# line = re.split('(;|,|\s)\s*',line) # print(line) #['asdf', ' ', 'fjdk', ';', 'afed', ',', 'fjek', ',', 'asdf', ',', 'foo'] #使用分组会捕获匹配的分割字符添加到列表中
value = line[::2] print(value) #['asdf', 'fjdk', 'afed', 'fjek', 'asdf', 'foo'] #使用切片步长来获取被分割的元素
delimiters = line[1::2] print(delimiters) #[' ', ';', ',', ',', ','] #使用切片获取分隔符
print(list(zip(value,delimiters))) #[('asdf', ' '), ('fjdk', ';'), ('afed', ','), ('fjek', ','), ('asdf', ',')] #使用zip函数把分隔符和被分割的元素组成元组再用生成器表达式拼接成字符串
values = ''.join(v+delimiter for v,delimiter in zip(value,delimiters)) print(values) #asdf fjdk;afed,fjek,asdf, #把数据合并成了字符串
line = re.split('(?:,;|,|\s)\s*',line) print(line) #['asdf', 'fjdk;', 'afed', 'fjek', 'asdf', 'foo'] #如果一定要使用分组的形式分割数据,又不想保留分隔符可以使用?:丢弃分隔符
|