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
相关产品推荐
相关产品推荐

