动态字符串格式 C#

Posted

技术标签:

【中文标题】动态字符串格式 C#【英文标题】:Dynamic String Format C# 【发布时间】:2011-03-24 04:47:32 【问题描述】:

在 C#、Windows 窗体中,我将如何做到这一点:


07:55 Header Text:  This is the data<br/>07:55 Header Text:  This is the data<br/>07:55 Header Text:  This is the data<br/>

所以,如您所见,我有一个返回字符串,它可能相当长,但我希望能够将数据格式化为如下所示:


<b><font color="Red">07:55 Header Text</font></b>:  This is the data<br/><b><font color="Red">07:55 Header Text</font></b>:  This is the data<br/><b><font color="Red">07:55 Header Text</font></b>:  This is the data<br/>

如您所见,我基本上想在标题文本和时间的前面加上 &lt;b&gt;&lt;font color="Red"&gt;,并在 : 部分之前附加 &lt;/font&gt;&lt;/b&gt;

所以是的,哈哈,我有点迷路了。

我已经搞砸了 .Replace()Regex 模式,但没有取得多大成功。我真的不想替换文本,只是在某些位置追加/预先挂起。

有没有简单的方法可以做到这一点?

注意:[] 标签实际上是 标签,但我不能在这里使用它们 lol

【问题讨论】:

请正确格式化问题 对不起,我不明白。我已经在帖子中提出了这个问题。 噢噢噢!他就是这个意思。很抱歉,我对这个网站很陌生,不知道这一切是如何运作的。再次抱歉,并没有引起大惊小怪的意思。 【参考方案1】:

仅仅因为您使用 RegEx 并不意味着您必须替换文本。

以下正则表达式:

(\d+:\d+.*?:)(\s.*?\[br/\])

有两个“捕获组”。然后,您可以将整个文本字符串替换为以下内容:

[b][font color="Red"]\1[/font][/b]\2

这应该会产生以下输出:

[b][font color="Red"]07:55 Header Text:[/font][/b] This is the data[br/]
[b][font color="Red"]07:55 Header Text:[/font][/b] This is the data[br/]
[b][font color="Red"]07:55 Header Text:[/font][/b] This is the data[br/]

编辑:这是一些演示上述内容的 C# 代码:

var fixMe = @"07:55 Header Text: This is the data[br/]07:55 Header Text: This is the data[br/]07:55 Header Text: This is the data[br/]";
var regex = new Regex(@"(\d+:\d+.*?:)(\s.*?\[br/\])");
var matches = regex.Matches(fixMe);

var prepend = @"[b][font color=""Red""]";
var append = @"[/font][/b]";

string outputString = "";
foreach (Match match in matches)

    outputString += prepend + match.Groups[1] + append + match.Groups[2] + Environment.NewLine;


Console.Out.WriteLine(outputString);

【讨论】:

嗯,我不熟悉 \2\3 格式。那些是返回结果吗?抱歉,在 C# 中正则表达式的高级功能方面还是新的。 @user674311 - 抱歉,我使用了一个很棒的文本编辑器 Sublime Text,首先测试了正则表达式。斜杠是特定于该编辑器的语法。但是,我添加了一些 C# 代码,它们应该可以做同样的事情。 天哪,太棒了。它就像一个魅力!现在我明白了一些。特别是如何在那里进行替换,我不知道“匹配”声明。非常感谢您的帮助!【参考方案2】:

你试过.Insert()检查this。

【讨论】:

是的,但我遇到的问题是 .Insert() 需要一个有限的开始,对吧?比如:MyString.Insert(0, "My");将在位置 0 插入。不幸的是,我遇到的问题是我需要在不同的位置插入,所有这些都在一个字符串上。所以我不确定如何使用 .Insert() 来做到这一点。我是否需要将字符串拆分为一个数组,并处理数组中的每一行,然后先将数组重新连接在一起? 对不起,我阅读了未格式化的问题,因此我把这个给了你,以为你想附加纯文本。我的错。给出的答案简直太棒了!【参考方案3】:

您是否考虑过通过将每一行包装在 pdiv 标记中来创建样式并设置每一行的 css 类?

更易于维护和构建。

【讨论】:

【参考方案4】:

最简单的方法可能是使用string.Replace()string.Split()。假设您的输入字符串是input(未经测试):

var output = string.Join("<br/>", in
    .Split("<br/>)
    .Select(l => "<b><font color=\"Red\">" + l.Replace(": ", "</font></b>: "))
    .ToList()
    ) + "<br/>";

【讨论】:

以上是关于动态字符串格式 C#的主要内容,如果未能解决你的问题,请参考以下文章

[转]C# 将类的内容写成JSON格式的字符串

C# 动态 for 循环

c# 多个json字符串反序列化

C#公共帮助类JsonHelper 操作帮助类

从动态数据c#中获取子字符串

通过字符串获取c#动态属性的值