如何用正则表达式拆分含全角括号的文本为指定格式词单元
文本拆分正则解决方案
针对需求中「全角左括号与后续内容合并、全角右括号与前置内容合并,CJK字符单独成词、连续ASCII字符成词」的规则,可使用以下正则表达式实现:
new Regex(@"((?:[\u0000-\u007F]+|[^\u0000-\u007F])|[^\u0000-\u007F])|[\u0000-\u001F\u0021-\u007F]+|[^\u0000-\u007F]");
正则规则说明
((?:[\u0000-\u007F]+|[^\u0000-\u007F]):优先匹配全角左括号「(」+ 后续的连续ASCII字符序列,或全角左括号「(」+ 单个CJK字符,确保左括号与后续内容合并为一个单元[^\u0000-\u007F]):匹配单个CJK字符 + 全角右括号「)」,确保右括号与前置CJK字符合并为一个单元[\u0000-\u001F\u0021-\u007F]+:匹配连续的ASCII非空白字符序列(比如英文单词start)[^\u0000-\u007F]:匹配剩余的单个CJK字符(无括号关联的普通字符)
测试验证
对输入文本这是(一段测试)文字(start开始end)的结果进行拆分,输出结果完全符合预期:
这 是 (一 段 测 试) 文 字 (start 开 始 end) 的 结 果
原正则问题说明
原正则将全角括号视为独立的CJK字符拆分,未处理括号与前后内容的合并逻辑,因此无法满足需求。通过调整正则匹配优先级,优先匹配带括号的组合单元,即可解决该问题。
内容的提问来源于stack exchange,提问作者Dallon Xu
相关产品推荐
相关产品推荐

