.net 在SpectreConsole中,如何剥离标签以获得纯文本字符串?

nlejzf6q  于 2022-12-14  发布在  .NET
关注(0)|答案(2)|浏览(128)

我使用的是Spectre.Console,有很多AnsiConsole.MarkupLine命令,如下所示:

AnsiConsole.MarkupLine($"[lime]File size:[/] [bold]\t{file.Length,-10}[/]");

我想在文本文件中输出相同的纯文本,不带颜色,例如

var msg = $"[lime]File size:[/] [bold]\t{file.Length,-10}[/]"
AnsiConsole.MarkupLine(msg);
var msgclean = AnsiConsole.StripTag(msg);
LogToFile(msgclean);

有没有办法去掉标记?或者把控制台输出重定向到一个文件?

lskq00tm

lskq00tm1#

看看下面的语言扩展是否适合你。正则表达式模式取自this post。尝试通过dotnetfiddle

public static class StringExtensions
{
    private static readonly Regex Whitespace = new(@"\s+");

    public static string Flatten(this string value)
        => value is null or "" ?
            value :
            Whitespace.Replace(value.Trim(), " ");

    public static string StripCodes(this string sender)
        => Regex.Replace(sender, @"\[[^]]*\]", "")
            .Flatten();
}
5anewei6

5anewei62#

我仔细研究了他们的API,发现这个扩展方法应该可以做到这一点:一个月一个月一个月一个月

相关问题