从字符串中删除特定的非html标签

问题描述:

我想知道如何使用C#和RegEx轻松地从字符串中删除特定值。我有以下HTML字符串:从字符串中删除特定的非html标签

Add [tt]PEELED PLUM SHAPED TOMATOES in tomato juice[/tt][rg]WHOLE PEELED TOMATOES[/rg][rp]WHOLE PEELED TOMATOES in JUICE[/rp], basil, oregano, parsley, salt, black pepper, sugar, [tt]TOMATO SAUCE[/tt][rg]TOMATO SAUCE[/rg][rp]TOMATO SAUCE[/rp], [brand][rg]TOMATO PASTE[/rg][rp]TOMATO PASTE[/rp] 

我需要某种方式来过滤掉例如这部分:

[tt]PEELED PLUM SHAPED TOMATOES in tomato juice[/tt] 

所以应该删除[tt]标签以及中间的文本。如果[tt]标记在源字符串内多次出现,则也应该删除它。

这可以通过使用正则表达式吗?

感谢, 丹尼尔

是。只要[tt]标签从来没有嵌套,很容易:

result = Regex.Replace(subject, @"\[tt\].*?\[/tt\]", "", RegexOptions.Singleline); 

如果你希望嵌套[tt]标签,那么你需要重复应用下面的命令,一旦每个嵌套层次:

result = Regex.Replace(subject, @"\[tt\](?:(?!\[/?tt\]).)*\[/tt\]", "", RegexOptions.Singleline); 
+0

...但是当字符串看起来像'[tt] abc [tt] def [/ tt] ghi [/ tt]'?哦,那就对了。不要使用正则表达式来解析html。 –

+0

如果你担心嵌套,很容易把它扔进一个循环,并更换,直到没有更多的匹配。 – Lincoded

+0

@Lincoded:不,这不适用于这个正则表达式。它会匹配'[tt] foo [tt] bar [/ tt]'。尽管如此,它*可以被改变来处理这个问题。 –