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

如何让C#正则表达式正确识别Unicode字符完成末尾内容匹配替换?

你遇到的现象和UTF-8编码无关,根源是C#的字符串采用UTF-16编码存储:单个char类型占16位,只能表示U+0000~U+FFFF范围内的Unicode字符,而绝大多数emoji属于U+10000及以上的Unicode码位,会用两个char(高位代理+低位代理)拼接存储。正则中的.默认匹配单个char,所以单个emoji会被判定为2个字符,才会出现需要写两个.才能匹配的情况。

方案1:.NET 6及以上版本(推荐)

.NET 6开始正则支持\X转义符,专门用于匹配单个完整的Unicode字位簇,不管它占用几个char,适配普通字符、emoji、带组合标记的特殊字符等所有场景。
修改后的代码如下:

sText = Regex.Replace(sText, @"\| \X$", "");

方案2:兼容低版本.NET

如果使用的是.NET 6以下的版本,可以手动写代理对匹配逻辑,同时兼容普通字符和代理对形式的特殊字符:

// 匹配要么是单个普通字符,要么是一对代理对(emoji等特殊字符)
sText = Regex.Replace(sText, @"\| (?:[\uD800-\uDBFF][\uDC00-\uDFFF]|.)$", "");

两种方案都可以同时适配普通字符和emoji场景,不需要额外做编码转换,只要你从HttpClient获取字符串时已经正确用UTF-8解码得到正常的C#字符串即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 19:18:01