删除<nis>,<nonnative>和space </nonnative> </nis>以外的字符

时间:2013-12-19 02:53:55

标签: c# regex

我在数据表中有大量的字符串数据,我想删除除<NIS/><NONNATIVE/>和空格之外的字符。例如,

之前:" There are<NONNATIVE/> not<NIS/> <NIS/> correct"

之后:" <NONNATIVE/> <NIS/> <NIS/> "

因为数据很大,我想找一个快速的方法来处理它,有人可以帮助我吗?

3 个答案:

答案 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);

在我的测试中,这远远超过了其他所有目标。