如何拆分含有多种分隔符的字符串【永利集团304com】,python高级编程技巧

实在案例

我们要把某部字符串依附分隔符号拆分差别的字段,该字符串包蕴种种差异的分隔符,比方:
s=’ab;cd|efg|hi,jkl|mntopq;rst,uvwtxyz’其中<,>, <;>,
<|>, <t>都以分隔符号,如哪个地方理?

实施方案:

  • 连日来使用str.split(),每一回拍卖一种分隔符号;
  • 利用正则表明式的re.split(),叁遍性拆分字符串。

大家先利用办法一拜谒管理功用是还是不是知足实际案例要求,其代码如下所示:

# -*- coding: utf-8 -*-def mySplit: res = [s] for d in ds: t = [] map(lambda x: t.extend(x.split res = t return resif __name__ == "__main__": s = 'ab;cd|efg|hi,jkl|mntopq;rst,uvwtxyz' print mySplit(s, ';,|t')

其出口结果为:

['ab', 'cd', 'efg', 'hi', 'jkl', 'mn', 'opq', 'rst', 'uvw', 'xyz']

纵然,大家将分隔符号给处理掉了,
但要是有八个三番五次的相间符号,这种格局就能够出现至极,如:s=’ab;cd|efg|hi,,;jkl|mntopq;rst,uvwtxyz’,其运转结果如下:

['ab', 'cd', 'efg', 'hi', '', '', 'jkl', 'mn', 'opq', 'rst', 'uvw', 'xyz']

我们会意识结果列表中多出四个空字符。即使大家要求不含空字符的结果列表,那么我们又要对结果列表中的空字符举办拍卖,其代码如下:

def mySplit: res = [s] for d in ds: t = [] map(lambda x: t.extend(x.split res = t return [x for x in res if x]

其出口结果为:

['ab', 'cd', 'efg', 'hi', 'jkl', 'mn', 'opq', 'rst', 'uvw', 'xyz']

据此, 大家这里推荐使用方法二对分隔符进行管理,其代码如下:

# -*- coding: utf-8 -*-import res = 'ab;cd|efg|hi,,;jkl|mntopq;rst,uvwtxyz'print re.split(r'[,;t|]+', s)

其出口结果为:

['ab', 'cd', 'efg', 'hi', 'jkl', 'mn', 'opq', 'rst', 'uvw', 'xyz']

注:代码中字符串前增多r时为了防卫’t’这种转义字符被转义。关叶昭君则表明式部分此处不详细表达,如有兴趣可参看菜鸟教程网。

通过上述多少个主意,我们得以精晓到:当大家管理单个分隔符时,推荐使用str.split();当大家对四个分隔符举办管理时,推荐应用re.split()。

一. 怎样拆分含有多种分隔符的字符串

实质上案例:

  1. 咱俩要把某部字符串依靠分隔符号拆分差异的字段,该字符串包蕴多样差异的分隔符,举个例子:
    拆分 s = ‘ab;cd|efgh|hi,jkl|mntopq;rst,uvwtxyz’
    其中<,>,<;>,<|>,<t>都以分隔符号
不留余地方案:

艺术1. 接连使用 str.split() 方法,每回管理一种分隔符号。
措施2. 使用正则表明式的 re,split()
方法,一回性拆分字符串。(引入应用

代码示例:
# _*_ coding:utf-8 _*_
# @Author   : TianYu
# @Time     : 2017/10/12 15:55
# @File     : 拆分含多种分隔符的字符串.py

#拆分 s = 'ab;cd|efgh|hi,jkl|mntopq;rst,uvwtxyz'
#其中<,>,<;>,<|>,<t>都是分隔符号

#单一分隔符
s = 'liushuo 15196 0.0 0.0 22565 2872 pts/11 R+ 13:50 0:00 ps aux'#提取每个字段
s.split() #空白字符:空格、t、n等都是
print(s.split())
#['liushuo', '15196', '0.0', '0.0', '22565', '2872', 'pts/11', 'R+', '13:50', '0:00', 'ps', 'aux']

#方法 1 :连续使用str.split()方法,每次处理一种分隔符(不推荐,不优)
s = 'ab;cd|efgh|hi,jkl|mntopq;rst,uvwtxyz'
res = s.split(';')
print(list(map(lambda  x: x.split('|'),res)))#结果变成二维列表
#[['ab'], ['cd', 'efgh', 'hi,jkl', 'mntopq'], ['rst,uvwtxyz']]

#降维:二维变一维
t = [] #临时列表
print(list(map(lambda  x: t.extend(x.split('|')),res)))# [None, None, None]
print(t) #['ab', 'cd', 'efgh', 'hi,jkl', 'mntopq', 'rst,uvwtxyz']

res = t
t = []
print(list(map(lambda  x: t.extend(x.split(',')),res)))#[None, None, None, None, None, None]
print(t)#['ab', 'cd', 'efgh', 'hi', 'jkl', 'mntopq', 'rst', 'uvwtxyz']

#总结规律得出一个函数
def mySplit(s, ds):
    res = [s]

    for d in ds:
        t = []
        list(map(lambda x: t.extend(x.split(d)), res))
        res = t
    return [x for x in res if x] #过滤空字符串(当字符串中出现连续的分隔符时会产生空字符串)

s = 'ab;cd|efgh|hi,jkl|mntopq;rst,uvwtxyz'
print(mySplit(s,';,|t'))

#方法 2 : 使用正则表达式的re.split()方法,一次性拆分字符串(推荐使用)
import re

s1 = 'ab;cd|efgh|hi,jkl|mntopq;rst,uvwtxyz'
print(re.split('[,;t|]+', s1))

二. 怎么样判断字符串 a 是否以字符串 b 最初或最后

骨子里案例:

  1. 某文件系统目录下有一密密麻麻文件:
    quicksort.c
    graph.py
    heap.java
    install.sh
    stack.cpp
    ……
    编写程序给当中有着 .sh 文件和 .py 文件加上客商可实践权限
焚薮而田方案:

1.利用字符串的str.startswith()str.endswith()方法
在意:多个相配时参数使用元组

发表评论

电子邮件地址不会被公开。 必填项已用*标注