动态字符串格式 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/>
如您所见,我基本上想在标题文本和时间的前面加上 <b><font color="Red">
,并在 : 部分之前附加 </font></b>
。
所以是的,哈哈,我有点迷路了。
我已经搞砸了 .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】:您是否考虑过通过将每一行包装在 p
或 div
标记中来创建样式并设置每一行的 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#的主要内容,如果未能解决你的问题,请参考以下文章