Python多个分割符分割字符串

Python多个分割符分割字符串,并去除空白项

刚学习Python的第一天就遇到一个麻烦:字符串中有多种分割符,并且需要分割后去除只有空字符的项
在C#中一个函数就行,对Python库不熟悉在Python中找不到对应函数所以自己封装

string[] strs= str.Split(new[] {',','='}, StringSplitOptions.RemoveEmptyEntries);

Python实现:

from enum import IntEnum


class StrSplitMode(IntEnum):
    NoneMode = 0
    RemoveEmpty = 1  # 移除空字符串的项
    RemoveSpace = 2  # 移除由空白字符组成的项
    RemoveSpaceOrEmpty = RemoveEmpty | RemoveSpace  # 移除空白组成 和 空字符的项
    Trim = 4  # 去除每一项的前后空白符,优先于移除操作执行


def StrSplit(inputStr, splitList, splitMode=StrSplitMode.RemoveSpaceOrEmpty):
    """
    多分割符分割字符串
    :param inputstr:需要分割的字符串
    :param splitList:分割符列表
    :param splitMode:分割模式
    """
    tempstr = str(inputStr)
    first = splitList[0]
    for s in splitList:
        if s == first:
            continue
        tempstr = tempstr.replace(s, first)
    rlist = tempstr.split(first)
    if splitMode != StrSplitMode.NoneMode:
        i = len(rlist)-1
        while i >= 0:
            if (splitMode & StrSplitMode.Trim) == StrSplitMode.Trim:
                rlist[i] = rlist[i].strip()
            if len(rlist[i]) <= 0 and (splitMode & StrSplitMode.RemoveEmpty) == StrSplitMode.RemoveEmpty:
                rlist.pop(i)
            elif rlist[i].isspace() and (splitMode & StrSplitMode.RemoveSpace) == StrSplitMode.RemoveSpace:
                rlist.pop(i)
            i -= 1
            rlist[i].strip()
    return rlist

挨个把第一个后面的分割符替换成第一个分割符再进行分割是一个很蠢的方法,应该用两个层循环去挨个分割然后拼到一个list里会提升不少性能,但是Python大佬朋友告诉我:使用Python时就收起C++那套不用考虑性能问题,然后我就释然了。

stra = "A A , BB, ,C C,,,         ,  ,:DD: :EE= =FF"
strs = StrSplit(stra, [",", ":", "="], StrSplitMode.RemoveSpaceOrEmpty|StrSplitMode.Trim)
print(stra)
print(strs)

最终得到我想要的结果:
在这里插入图片描述


版权声明:本文为chunTF原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。