Java中如何用正则表达式移除首尾ANSI代码保留中间文本?
移除首尾ANSI控制码的正则方案
适用的正则表达式
在Java的replaceAll方法中,你需要使用的正则字符串是:
"^\\033\\[[0-9;]*m|\\033\\[[0-9;]*m$"
完整代码示例
String text = "\033[1mYO\033[0m"; // 带ANSI粗体控制码的字符串 String plainText = text.replaceAll("^\\033\\[[0-9;]*m|\\033\\[[0-9;]*m$", ""); // 执行后 plainText 的值为 "YO"
正则规则解析
^\\033\\[[0-9;]*m:匹配字符串开头的ANSI控制码:^锚定字符串起始位置\\033匹配ESC转义字符(Java字符串中需用双反斜杠转义)\\[匹配左方括号(转义是因为[在正则中属于特殊元字符)[0-9;]*匹配任意数量的数字或分号,支持多参数的ANSI码(比如\033[1;31m这类同时控制粗体和颜色的代码)m匹配控制码的结尾标记
|表示逻辑“或”,用于同时匹配开头和结尾的控制码\\033\\[[0-9;]*m$:匹配字符串结尾的ANSI控制码,$锚定字符串结束位置
边界场景适配
- 仅开头有ANSI码(如
\033[4mTest):移除开头码,保留Test - 仅结尾有ANSI码(如
Test\033[0m):移除结尾码,保留Test - 无ANSI码的纯文本:正则无匹配,直接返回原字符串
内容的提问来源于stack exchange,提问作者ThomasG2201
相关产品推荐
相关产品推荐

