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

如何在Erlang中按空格分割二进制数据?

在Erlang中按空格分割二进制数据的实用方法

嘿,我来帮你搞定Erlang里二进制按空格分割的需求!其实Erlang标准库就提供了不少好用的工具,不同场景下选对方法效率会很高,下面我给你拆解几种常见情况:

1. 基础场景:单个空格分割(无连续空格)

如果你的二进制数据里只有单个空格分隔元素,用binary:split/3就足够了,记得加上global选项来全局分割,不然只会拆分第一个空格:

1> binary:split(<<"hello world erlang">>, <<" ">>, [global]).
[<<"hello">>,<<"world">>,<<"erlang">>]

这里的<<" ">>是分隔符,[global]告诉函数要把所有匹配的位置都拆分,而不是只拆一次。

2. 复杂场景:处理连续空格、首尾空格

要是你的二进制里有多个连续空格,或者首尾带空格,直接用binary:split会得到空的二进制元素,这时候正则表达式工具re:split/3更靠谱:

比如输入是<<" hello world erlang ">>,我们可以这样写:

2> re:split(<<"  hello   world   erlang  ">>, <<"\\s+">>, [{return, binary}, trim]).
[<<"hello">>,<<"world">>,<<"erlang">>]

解释下参数:

  • <<"\\s+">>:匹配一个或多个空白字符(包括空格、制表符等,如果只想匹配空格,换成<<" +">>就行)
  • {return, binary}:确保返回结果是二进制列表,而不是默认的字符串列表
  • trim:自动去掉首尾的空白分割结果,避免出现空的二进制元素

3. 自定义需求:手动实现分割逻辑

如果有更特殊的需求(比如只分割特定位置的空格、保留某些空格),可以自己写递归函数来处理,比如一个基础的实现:

split_binary_by_space(Bin) ->
    split_binary_by_space(Bin, <<>>, []).

split_binary_by_space(<<>>, Current, Acc) ->
    lists:reverse([Current | Acc]);
split_binary_by_space(<<" ", Rest/binary>>, Current, Acc) ->
    % 跳过连续空格,避免添加空元素
    case Current of
        <<>> -> split_binary_by_space(Rest, <<>>, Acc);
        _ -> split_binary_by_space(Rest, <<>>, [Current | Acc])
    end;
split_binary_by_space(<<C/utf8, Rest/binary>>, Current, Acc) ->
    split_binary_by_space(Rest, <<Current/binary, C/utf8>>, Acc).

测试一下效果:

3> split_binary_by_space(<<"  hello   world erlang  ">>).
[<<"hello">>,<<"world">>,<<"erlang">>]

这个版本会自动忽略连续的空格,不会产生空元素,你可以根据自己的需求再调整逻辑。

如果你的二进制有特定格式(比如带引号的空格要保留之类的),可以把具体的示例数据和预期结果告诉我,我再帮你优化方案~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:49:01