我有一个从Web套接字收到的字符串:
let websocket = new ClientWebSocket()
let source = new CancellationTokenSource()
let buffer = ArraySegment(Array.zeroCreate 32)
do! websocket.ConnectAsync(url, source.Token)
do! websocket.ReceiveAsync(buffer, source.Token)
let str = Encoding.ASCII.GetString buffer.Array
let trim1 = Regex.replace str "\0" String.Empty // result is empty string
let trim2 = Regex.replace str "\\0" String.Empty // result is empty string
let trim3 = str.TrimEnd [| '\\'; '0' |] // result is untouched
Run Code Online (Sandbox Code Playgroud)
我显然试图削减多余的空字符
在调试器中,str的值为"{\"type \":\"hello \"}\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
打印时看起来像:{"type":"hello"}这是有道理的,符号正在被正确解释.
我似乎无法在f#中完成这个简单的任务,我做错了什么?
使用ASCII转义可以解决问题:
let trim3 = str.TrimEnd [| '\x00' |]
Run Code Online (Sandbox Code Playgroud)
你也可以使用unicode转义序列来逃避它:
let trim3 = str.TrimEnd [| '\u0000' |]
Run Code Online (Sandbox Code Playgroud)
您的正则表达式版本不起作用,因为在正则表达式中表示空字符的正确方法是使用ASCII转义"\x00",或使用unicode转义"\u0000".
| 归档时间: |
|
| 查看次数: |
694 次 |
| 最近记录: |