gpt4 book ai didi

C# 读取字符串中的多个标签

转载 作者:可可西里 更新时间:2023-11-01 11:27:13 30 4
gpt4 key购买 nike

我想允许用户读取一个字符串中的多个标签。到目前为止,用户只能添加一个标签

 if (rtb.Text.Contains("[b]"))
{
Regex regex = new Regex(@"\[b\](.*)\[/b\]");
var v = regex.Match(rtb.Text);
string s = v.Groups[1].ToString();

rtb.SelectionStart = rtb.Text.IndexOf("[b]");
rtb.SelectionLength = s.Length + 7;

rtb.SelectionFont = new Font(rtb.Font.FontFamily, rtb.Font.Size, FontStyle.Bold);
rtb.SelectedText = s;
}


else if (rtb.Text.Contains("[i]"))
{
Regex regex = new Regex(@"\[i\](.*)\[/i\]");
var v = regex.Match(rtb.Text);
string s = v.Groups[1].ToString();

rtb.SelectionStart = rtb.Text.IndexOf("[b]");
rtb.SelectionLength = s.Length + 7;

rtb.SelectionFont = new Font(rtb.Font.FontFamily, rtb.Font.Size, FontStyle.Italic);
rtb.SelectedText = s;
}

richTextBox1.Select(richTextBox1.TextLength, 0);
richTextBox1.SelectedRtf = rtb.Rtf;

如果我有这个字符串:

"Hello [b]World[/b] Meet the [b]Programmer[/b]"

输出是这样的:

"Hello World Meet the Programmer"

如果我有这个字符串:

"Hello [b]World[/b] Meet the [i]Programmer[/i]"

输出是这样的:

"Hello World Meet the [i]Programmer[/i]"

如何从一个字符串中读取多个标签?比如,在一个字符串中,如果我有 2 个 [b][/b] 标签、5 个 [i][/i] 标签甚至混合标签 ([b][i][/i][/b])?

最佳答案

两个问题:

<强>1。正则表达式的贪心匹配语义

\[b\](.*)\[/b\]在您的字符串中寻找可能的最长 匹配,即它是贪婪。在您的示例中,您希望它匹配 [b]World[/b] , 实际上它匹配 [b]World[/b] Meet the [b]Programmer[/b] (因此也使“遇见”变得粗体)。这可以使用非贪婪 语法轻松解决:\[b\](.*?)\[/b\] (注意额外的 ? )

详情:How to Match with Regex "shortest match" in .NET

<强>2。您只查找一次出现的标签!

显然,您的代码只会突出显示一个 [b]/[i]标签。不要使用 else if如果你想要 [i]如果您的字符串包含 [b] 将被处理.使用循环和 Regex.Matches如果您想处理所有出现的正则表达式,而不仅仅是第一个。

关于C# 读取字符串中的多个标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32300141/

30 4 0