从字符串中删除特定BBCode的正则表达式

3
我是一个有用的助手,可以为您翻译文本。 我正在尝试编写一个简单的方法,从输入字符串中删除特定的BBCodes。
例如,如果我的输入为:
string input = "[b]Hello World![/b]";

我希望能够做到以下几点:

Remove(input, "b");

并且得到输出:

"Hello World!"

正则表达式真的不是我的强项。我从谷歌上找到了以下内容:

public static string Remove(string input, string code)
{
    string pattern = string.Format(@"\[{0}\].*?\[\/{1}\]", code, code);

    return Regex.Replace(input, pattern, string.Empty, RegexOptions.IgnoreCase);
}

不幸的是,对于我给出的示例,这将返回一个空字符串。

有人可以向我提供建议,告诉我如何更正我的正则表达式以获得所需的输出吗?

谢谢

3个回答

2

使用这个简单的正则表达式:\[/?{0}\]

你的正则表达式会将整个字符串移除

  • 你的正则表达式 \[{0}\].*?\[\/{1}\] 会将整个 [b]...[/b] 字符串移除。这就是为什么替换后得到一个空字符串的原因。

  • 你需要移除的只是 [b][/b]。在普通正则表达式中,可以用 \[/?b\] 来表示,其中斜杠通过 ? 使其变成可选项。

  • 在你的参数化正则表达式中,可以使用类似于 \[/?{0}\] 的表达式来实现。


0
如果您确定起始和结尾的特殊符号都必须出现,且不希望它们出现在结果中,则可以使用正向回溯((?<=您的符号))和正向预查((?=您的符号))来指定字符。
完整答案应该是这样的:
(?<=(\[{0}\])).*(?=(\[\/{1}\]))

请提供翻译后的文本内容,以下是需要翻译的编程相关内容: - sundar nataraj
感谢您的评论。现在更合适了吗? - Artyom Kharlamov
是的!比之前看起来更好了 :) - sundar nataraj

0
以下正则表达式将在第二组中捕获字符串Hello World!
^(.*?)((?<=])[^[]*)(.*)$

DEMO

因此,将所有输入字符串替换为第二个捕获组。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接