我有一个包含 ,<p> </p> and <br>
的长字符串。我想从所有这些标签和空格中清除我的字符串。如何使用String.Replace()方法完成。我现在正在单独做,它正在工作但有一种方法可以立即执行,没有replace()方法。
String.Replace(" ","").Replace("<p>","").Replace("<br>","")
它给了我干净的代码,但我正在寻找一个通用的解决方案,意味着如果我有更多的标签(10到20)来过滤,那么如何有效地做到这一点。
答案 0 :(得分:2)
您可以构建由要替换的所有标记组成的正则表达式替换模式,例如tag1|tag2
,并使用Regex.Replace
method。您应该转义它们以防止任何字符被错误地解释为正则表达式元字符。
例如:
string input = "<p>Hello, World<br>Foo<br>Bar</p>";
string[] replaceItems = { "<p>", " ", "<br>" };
if (replaceItems.Length > 0)
{
string pattern =
String.Join("|", replaceItems.Select(s => Regex.Escape(s)).ToArray());
string result = Regex.Replace(input, pattern, String.Empty);
Console.WriteLine(result);
}
else
{
// nothing to replace
Console.WriteLine(input);
}
如果您需要将替换设置为不区分大小写,请使用RegexOptions.IgnoreCase
选项:Regex.Replace(input, pattern, "", RegexOptions.IgnoreCase)
。
在.NET 4.0中,您可以放弃ToArray()
电话。
答案 1 :(得分:1)
替换是好的,你可以有一个标签列表,如下所示:
foreach(var tag in tags)
{
str = str.Replace(tag, "");
}
答案 2 :(得分:1)
@所有答案都使用替换字符串,取决于替换次数,使用StringBuilder更有效,因为字符串对象是不可变的。
var sb = new StringBuilder(input);
var replaceItems = new[] { "<p>", " ", "<br>" };
foreach (var replace in replaceItems)
{
sb.Replace(replace, String.Empty);
}
input = sb.ToString();
答案 3 :(得分:0)
你可以写一个扩展方法,让眼睛变得容易 - 当使用它现在是一个单行时。
string[] token = { "foo", "bar" };
string text = "blaah foo bar text";
text = text.ReplaceAll(token, "");
public static class StringHelper
{
public static string ReplaceAll(this string text,
string[] token,
string replacement)
{
string newText = text;
foreach (string s in token)
newText = newText.Replace(s, replacement);
return newText;
}
}
答案 4 :(得分:0)
string[] items= { "<p>", " ", "<br>" };
foreach (string itemtodelete in items)
{
test=test.Replace(itemtodelete,"");
}