You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Freemarker:如何拆分字符串或截取指定动态子串前的内容

解决方案

正则替换方式(适用于Shell环境,用sed命令)

如果要实现每行在第一个/前两个字符处拆分,且去掉第二部分的最后一个字符,可以执行以下命令:

sed 's/\(.* \)\(.*\)\(.\)/\1\n\2\n/' 你的输入文件名

解释:

  • \(.* \):匹配空格前的所有内容(即第一部分)
  • \(.*\)\(.\):匹配空格后的内容,分为倒数第一个字符和其余部分
  • \1\n\2\n:将第一部分、其余部分分别换行,且每行拆分后添加空行

执行后输出结果:

apple
s/sl/ab

banana
a/b/asf

hermit
c/d/af

脚本方式(以Python为例)

如果需要更灵活的处理,可以用脚本实现:

# 读取输入内容
input_text = """apple s/sl/abc
banana a/b/asf
hermit c/d/afd"""

processed_lines = []
for line in input_text.split('\n'):
    # 定位第一个/的位置
    first_slash_pos = line.find('/')
    if first_slash_pos != -1:
        # 计算拆分位置:第一个/前两个字符处
        split_pos = first_slash_pos - 2
        # 拆分并处理第二部分(去掉最后一个字符)
        part1 = line[:split_pos]
        part2 = line[split_pos+1:-1]
        processed_lines.extend([part1, part2, ''])

# 输出结果,移除最后多余的空行
print('\n'.join(processed_lines[:-1]))

关于你尝试的keep_before函数

你用的item.item?keep_before("$/")写法有问题:

  • $/通常表示行尾,不是第一个/,应该改为匹配第一个/的表达式,比如keep_before("/")只能获取第一个/之前的内容,但无法直接实现“前两个字符处拆分”。如果要基于这个函数实现,需要先获取第一个/的位置,再计算偏移量——先提取第一个/的索引,再截取索引减2之前的内容,剩下的部分单独处理。

内容的提问来源于stack exchange,提问作者sweetarts

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 02:31:08