我在数据表中有大量的字符串数据,我想删除除<NIS/>
,<NONNATIVE/>
和空格之外的字符。例如,
之前:" There are<NONNATIVE/> not<NIS/> <NIS/> correct"
之后:" <NONNATIVE/> <NIS/> <NIS/> "
。
因为数据很大,我想找一个快速的方法来处理它,有人可以帮助我吗?
答案 0 :(得分:1)
我想你可以做这样的事情
var before = " There are<NONNATIVE/> not<NIS/> <NIS/> correct";
var after = new StringBuilder();
Regex.Replace(before, @"( |<NONNATIVE\/>|<NIS\/>)", m =>
{
after.Append(m.Value);
return "";
});
它会捕获您想要接受的内容并添加到StringBuilder
,然后您只需将其转换为ToString
// <NONNATIVE/> <NIS/> <NIS/>
after.ToString();
答案 1 :(得分:1)
您可以使用以下内容。
string input = " There are<NONNATIVE/> not<NIS/> <NIS/> correct";
string output = Regex.Replace(input, @"((?> |<NIS\/>|<NONNATIVE\/>)*)\S?", "$1");
// " <NONNATIVE/> <NIS/> <NIS/> "
请参阅Live demo
答案 2 :(得分:0)
不确定性能,但这也有效:
string input1 = " There are<NONNATIVE/> not<NIS/> <NIS/> correct";
string[] approvedlist = {"<NONNATIVE/>","<NIS/>"};
string output1 = string.Join(" ", (from s in input1.Split(@"<>".ToCharArray())
where approvedlist.Contains(s)
select "<" + s + ">").ToArray());
我做了一次性能测试,这几乎等于Bruno的例子,超过100000个字符,你想要每5到20个字符随机插入一个字符串。
做了一些优化,并考虑了你的进一步评论,并提出了这个:
string[] approvedlist = {"<NONNATIVE/>","<NIS/>"};
var output2 = new StringBuilder();
foreach(string s in input1.Split(@"<>".ToCharArray()))
if(approvedlist.Contains(s))
output2.AppendFormat("<{0}> ", s);
在我的测试中,这远远超过了其他所有目标。