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

我正在尝试编写一种从输入字符串中删除特定BBCode的简单方法。

例如,我有一个输入:

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); } 

不幸的是,这给我的给定示例返回一个空字符串。

谁能告诉我如何纠正我的正则表达式以获得所需的输出?

谢谢

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

你的正则表达式正在删除整个字符串

  • 您的正则表达式\[{0}\].*?\[\/{1}\]正在删除整个[b]...[/b]字符串。 这就是为什么你从替换中得到一个空字符串。

  • 你需要的是只删除[b][b] 。 在普通的正则表达式中,用\[/?b\]表示非常简单,其中斜杠是可选的?

  • 在参数化的正则表达式中,类似\[/?{0}\]都可以。

下面的正则表达式将捕获字符串Hello World! 在第二组内。

 ^(.*?)((?<=])[^[]*)(.*)$ 

DEMO

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

如果你确定必须同时出现起始和尾随特殊符号并且你不希望它们出现在结果中,你可以使用正向回顾((?<=(这里是你的符号)))和正向前看((? =(您的符号在这里)))指定的字符。

完整的答案将如下所示:

 (?<=(\[{0}\])).*(?=(\[\/{1}\])) 
Interesting Posts