在数据分析当中常常会遇到字符串分割操作,但是有时不想分割引号中的分割符,不限于引号,这时候单靠 split 函数是无能为力的,我这写了Scala以及Python的递归函数来解决此问题,功能为忽略引号中的分割符。
将引号中的字符串进行处理(替换需要分割的分割符,或者进行其他替换操作)
函数执行完毕后可以直接使用 split(",") 进行分割,不影响我们想要保留的数据
Scala代码:

object Example {
  def main(args: Array[String]): Unit = {
    var data = "贵州,贵州电子信息技术有限公司,123456,\"['节日礼物', '技能培训', '带薪年假', '岗位晋升']\",信息技术,150-500人,\"['贵阳', '凯里']\",设计,用户研究,本科,\"电子商务,O2O\",654321,\"可转正,成长空间大\",数据分析专员(实习生),\"['数据分析', '数据采集']\",2k-4k,应届毕业生"
    println(splitIgnore(data, '"'))
  }

  // 字段信息:字符串数据 指定要忽略的字符
  def splitIgnore(str: String, charIgnore: Char): String = {
    var text: String = ""
    var index: Int = 0
    // 查找 charIgnore 字符索引
    var start: Int = str.indexOf(charIgnore)
    // 返回 -1 则代表未找到
    if (start == -1) {
      text = text.concat(str)
      return text
    }
    // 连接字符串
    text = text.concat(str.substring(index, start))
    index = start + 1
    // 查找 charIgnore 字符索引,从 index 开始向后查找
    var end: Int = str.indexOf(charIgnore, index)
    // 获取并处理 起始到终止 的字符串
    var subStr: String = str.substring(index, end).replaceAll("'|\\]|\\[|\\s", "").replaceAll(",", "|")
    // 连接字符串
    text = text.concat(subStr)
    // 进行递归操作,最后字符串拼接返回
    text.concat(splitIgnore(str.substring(end + 1), charIgnore))
  }
}

输出结果:

贵州,贵州电子信息技术有限公司,123456,节日礼物|技能培训|带薪年假|岗位晋升,信息技术,150-500人,贵阳|凯里,设计,用户研究,本科,电子商务|O2O,654321,可转正|成长空间大,数据分析专员(实习生),数据分析|数据采集,2k-4k,应届毕业生

Python代码:

import re

def splitIgnore(strData, charIgnore):
    text = ""
    index = 0
    try:
        # 查找 charIgnore 字符索引
        start = strData.index(charIgnore)
    # 抛出 ValueError 异常则代表未找到 charIgnore 字符索引
    except ValueError:
        text = text + strData
        return text
    # 连接字符串
    text = text + strData[index:start]
    index = start + 1
    # 查找 charIgnore 字符索引,从 index 开始向后查找
    end = strData.index(charIgnore, index)
    # 获取并处理 起始到终止 的字符串
    subStr = re.sub("\\]|\\[|\\s", "", strData[index:end]).replace(",", "|")
    # 连接字符串
    text = text + subStr
    # 进行递归,最后字符串拼接返回
    return text + splitIgnore(strData[end + 1:], charIgnore)

if __name__ == '__main__':
    data = '贵州,贵州电子信息技术有限公司,123456,"[节日礼物, 技能培训, 带薪年假, 岗位晋升]",信息技术,150-500人,"[贵阳, 凯里]",设计,用户研究,本科,"电子商务,O2O",654321,"可转正,成长空间大",数据分析专员(实习生),"[数据分析, 数据采集]",2k-4k,应届毕业生'
    data = splitIgnore(data, '"')
    print(data)

输出结果:

贵州,贵州电子信息技术有限公司,123456,节日礼物|技能培训|带薪年假|岗位晋升,信息技术,150-500人,贵阳|凯里,设计,用户研究,本科,电子商务|O2O,654321,可转正|成长空间大,数据分析专员(实习生),数据分析|数据采集,2k-4k,应届毕业生