上个月帮运营导数据,表格里一列是北京-朝阳-建国路这种,领导只要横杠后面的部分,几千行靠手工删能把人逼疯,这种需求几乎天天见。

思路都一样,先定位那个分隔符在哪,再要它后面的东西。以 JS 为例, indexOf 找到位置,slice 从后面切:

let s = 订单号-20240601-088; let p = s.indexOf(横杠); let r = s.slice(p+1);

上面那行里的横杠记得换成真正的杠,写代码时别敲成了中文全角符号。

分隔符出现多次到底取哪一段

路径 D 盘杠工程杠图纸这种,用 indexOf 取到的是第一段之后全部,用 lastIndexOf 取到的是最后一段。如果要中间某段,split 按杠拆成数组再取下标最直观,比如取第二段就是 arr[1]。

Excel 里不用写代码,FIND 定位加 MID 截,或者直接用分列功能,按分隔符号一键拆成多列,几万行也是一秒完事。

找不到分隔符时程序为啥崩了

很多报错都是分隔符不存在,indexOf 返回负一,再加一切就切错了。上线前一定补个判断,返回负一就原样返回或者记一条日志。Python 里 find 和 index 区别就在这,一个返回负一,一个直接抛 ValueError。

  • 取后缀名:用 lastIndexOf 找最后一个点,比 split 更稳
  • 取网址参数:先找问号再找等号,分两步切不容易错
  • 取中文括号内容:注意全角半角括号是两个字符,先统一替换

SQL 里也有对应写法,MySQL 用 SUBSTRING_INDEX,SQLServer 用 CHARINDEX 加 SUBSTRING,Oracle 用 INSTR 加 SUBSTR,函数名不一样,套路完全一样。

日志脱敏也常干这事,手机号想只留后四位,就是先算长度再从长度减四的位置开始截。反过来取前缀就从下标零开始加个位数。尽量别用传负数下标的写法,各语言表现不一致,可能悄悄埋雷,还是老老实实算下标最稳。

取舍就一句话:一次性的活扔给 Excel 分列,反复跑的逻辑写成函数加判空,别让一条脏数据搞崩整批任务。