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

Regex无法过滤指定Unicode字符,且误删需保留符号的解决方案求助

解决方案

根据你的需求,这里提供几种针对性的正则方案,覆盖不同场景:

场景1:字符串中是字面量的\uXXXX文本序列

你最初的正则未生效,是因为逐字字符串里\\表示两个反斜杠,而目标字符串中是单个反斜杠加uXXXX的文本。修改正则即可匹配并移除这些序列:

string buffer = "÷0130100422758673\\u0001Y\\u001ean//n\\u0004";
buffer = Regex.Replace(buffer, @"\u[0-9a-fA-F]{4}", String.Empty);
// 输出:÷0130100422758673Yan//n

场景2:字符串中包含实际的Unicode控制字符

如果要移除的是真正的Unicode控制字符(比如U+0001、U+0004这类不可见字符),同时保留÷和常规可打印字符,用Unicode类别正则更精准:

string buffer = "÷0130100422758673\u0001Y\u001ean//n\u0004";
buffer = Regex.Replace(buffer, @"\p{C}", String.Empty);
// 输出:÷0130100422758673Yan//n

兼容两种场景的组合方案

如果不确定字符串里是字面量序列还是实际控制字符,可组合两个正则处理:

string buffer = "÷0130100422758673\\u0001Y\u001ean//n\\u0004";
// 先移除字面量的\uXXXX序列
buffer = Regex.Replace(buffer, @"\u[0-9a-fA-F]{4}", String.Empty);
// 再移除实际的控制字符
buffer = Regex.Replace(buffer, @"\p{C}", String.Empty);
// 输出:÷0130100422758673Yan//n

针对你第二次尝试的修正

你之前用[^ -~]+误删÷,是因为÷的ASCII码(247)不在空格(32)到波浪线(126)的范围内,只需把÷加入允许的字符集合即可:

string buffer = "÷0130100422758673\\u0001Y\\u001ean//n\\u0004";
buffer = Regex.Replace(buffer, @"[^ -~÷]+", String.Empty);
// 输出:÷0130100422758673Yan//n

补充说明

  • \p{C}是Unicode正则类别,匹配所有控制字符(不可见控制符、格式符等),比[^ -~]更精准,不会误删像÷这类不在ASCII可见范围但需要保留的字符。
  • 若有其他需保留的特殊字符,直接添加到字符集合中即可(比如[^ -~÷€]+保留欧元符号)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 11:27:37