代码阅读笔记,分隔符难题

时间:2019-12-19 07:08来源:365bet亚洲官方投注
有没有大佬知道用string.splite()分割字符串,要分割的字符串中有分割符咋办,就是能不能临时让分隔符不起作用,比如我用“/”做分割符,要分割的字符串为:aa/bb/a/b/ccc,我想要的结果

有没有大佬知道用string.splite()分割字符串,要分割的字符串中有分割符咋办,就是能不能临时让分隔符不起作用,比如我用“/”做分割符,要分割的字符串为:aa/bb/a/b/ccc,我想要的结果是:aabba/bccc这个咋办?

            BEGIN

实际案例:
我们要把某个字符串依据分隔符号拆分不同的字段,该字符串包含多种不同的分隔符
例如:s = 'ab;cd|efg|hi,jkl|mntopq;rst,uvwtxyz'
其中(;,|t)都是分割符

365bet亚洲官方投注 1

    BEGIN

方式二:

                SELECT  @returntext = SUBSTRING(@splitstring, @currentindex,

"""
split(pattern, string, maxsplit=0, flags=0)
    Split the source string by the occurrences of the pattern,
    returning a list containing the resulting substrings.
"""


import re
s = 'ab;cd|efg|hi,,jkl|mntopq;rst,uvwtxyz'
print(re.split(r'[;,t|]+',s))

      @splitstring NVARCHAR(4000) ,  --输入需要分割的字符串和分割符

解决方案:
方法一:连续使用str.split()方法,每次处理一种分隔符号
方法二:使用正则表达式的re.split()方法,一次性拆分字符串(推荐)

CREATE FUNCTION [dnt_split]   --字符串分割函数

总结:
对于单一分割符的情况,切分字符串使用字符串的split方法,速度更快。
对于多个分割符的情况,切分字符串使用re的split方法。

        DECLARE @currentindex INT

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|efg|hi,,jkl|mntopq;rst,uvwtxyz'
res = mySplit(s,';,|t')
print(res)

GO

方式一:

        RETURN    --返回,跟C# 不一样。不用专门指定返回什么,在函数声明时已经指定了

        DECLARE @returntext NVARCHAR(200)

        WHILE ( @currentindex <= DATALENGTH(@splitstring) / 2 )   --DATALENGTH返回字符串的字节数,一个NVARCHAR字符占2位。除以2表示字符串的字母个数

 

AS

      @separator CHAR(1) = ','

    (

                VALUES  ( @returntext )

                SELECT  @currentindex = @nextindex + 1   --移动搜索位置

                                                                --@separator为分割符,@splitstring为待分割的字符串

                     OR @nextindex IS NULL

    )

RETURNS @splitstringstable TABLE ( [item] NVARCHAR(200) )  --以表的形式返回分割后的字符串

                                                @nextindex - @currentindex)

                    SELECT  @nextindex = DATALENGTH(@splitstring) / 2

Technorati 标签: DNT365bet亚洲官方投注,,字符串分割,函数

下边是注释,是自己理解.

            END

                IF ( @nextindex = 0

        DECLARE @nextindex INT

        SELECT  @currentindex = 1

       --循环分割字符串。

                                                                --这一行为找出第一个匹配的位置@nextindex

                        ( [item] )

                   )

dnt_split是一个字符串分割函数,输入待分割的字符串和分割符,输出分割后的字符串表

                INSERT  INTO @splitstringstable    --将找出的结果插入到结果表中

                SELECT  @nextindex = CHARINDEX(@separator, @splitstring,   --CHARINDEX为字符串检索函数,联机丛书上有介绍

                                               @currentindex)   --@currentindex为搜索的起始位置,

  • 1   --如果没有找到,设置位置为@splitstring的最后一位

    END

编辑:365bet亚洲官方投注 本文来源:代码阅读笔记,分隔符难题

关键词: