正则表达式用尖括号替换方括号

我有一个字符串:

[ab="c" d="e"]Some multi line text[/a] 

现在部分d="e"是可选的。 我想将这种类型的字符串转换为:

 Some multi line text 

bb的值是不变的,所以我不需要捕捉它们。 我只需要ce的值和text between the tags并创建一个等效的基于xml的表达式。 那么怎么做呢,因为还有一些可选部分。

对于HTML标记,请使用HTML解析器。

对于[a] [/ a],你可以这样做

 Match m=Regex.Match(@"[ab=""c"" d=""e""]Some multi line text[/a]", @"\[ab=""([^""]+)"" d=""([^""]+)""\](.*?)\[/a\]", RegexOptions.Multiline); m.Groups[1].Value "c" m.Groups[2].Value "e" m.Groups[3].Value "Some multi line text" 

这是Regex.Replace(虽然我不喜欢)

 string inputStr = @"[ab=""[[[[c]]]]"" d=""e[]""]Some multi line text[/a]"; string resultStr=Regex.Replace(inputStr, @"\[a( b=""[^""]+"")( d=""[^""]+"")?\](.*?)\[/a\]", @"$3", RegexOptions.Multiline); 

如果您实际上正在考虑使用正则表达式处理(伪)-HTML,

SO充满了针对HTML / XML提出正则表达式的post,并且答案指出了为什么这是一个坏主意。

假设你的多行文字(“可以是任何东西”)包含

 [ab="foo" [ab="bar"]] 

正则表达式无法检测到这一点。

请参阅以下经典答案: RegEx匹配开放标记,但XHTML自包含标记除外

其中有:

我认为现在是时候退出助理不要使用正则表达式官员解析HTML的post了。 无论我们多少次说出来,他们都不会每天都停下来……甚至每小时一次。 这是一个失败的原因,其他人可以争取一点。 所以继续,用正则表达式解析HTML,如果必须的话。 它只是破碎的代码,而不是生与死。 – bobince

认真。 查找XML或HTML DOM并使用您的数据填充它。 然后序列化它。 这将解决你甚至不知道自己遇到的所有问题。

some multiline text包含[]吗? 如果没有,你可以使用string.replace替换[ with <] with > - 不需要正则表达式。

更新:如果它可以是[/a] ,则可以替换

 ^\[a([^\]]+)](.*?)\[/a]$ 

 $2 

我没有逃脱]/在正则表达式 - 如果有必要逃脱他们

 ^\[a([^\]]+)\](.*?)\[\/a\]$