从字符串中删除特定的非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);
...但是当字符串看起来像'[tt] abc [tt] def [/ tt] ghi [/ tt]'?哦,那就对了。不要使用正则表达式来解析html。 –
如果你担心嵌套,很容易把它扔进一个循环,并更换,直到没有更多的匹配。 – Lincoded
@Lincoded:不,这不适用于这个正则表达式。它会匹配'[tt] foo [tt] bar [/ tt]'。尽管如此,它*可以被改变来处理这个问题。 –