在数据分析当中常常会遇到字符串分割操作,但是有时不想分割引号中的分割符,不限于引号,这时候单靠 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,应届毕业生