以外的字符我在數據表中有大量的字符串數據,我想刪除<NIS/>
,<NONNATIVE/>
和空格以外的字符。例如,刪除除<NIS/>,<NONNATIVE/>和空格
之前:" There are<NONNATIVE/> not<NIS/> <NIS/> correct"
後:" <NONNATIVE/> <NIS/> <NIS/> "
。
由於數據量很大,我想找一個快速的方法來處理它,任何人都可以幫助我嗎?
以外的字符我在數據表中有大量的字符串數據,我想刪除<NIS/>
,<NONNATIVE/>
和空格以外的字符。例如,刪除除<NIS/>,<NONNATIVE/>和空格
之前:" There are<NONNATIVE/> not<NIS/> <NIS/> correct"
後:" <NONNATIVE/> <NIS/> <NIS/> "
。
由於數據量很大,我想找一個快速的方法來處理它,任何人都可以幫助我嗎?
你可以做這樣的事情,我想
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();
不關於性能肯定,但這也將工作:
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);
在我的測試中表現優於這一切迄今。
謝謝!可能linq的成本很高,這種方式花費我每個數據0.03s。 –
我注意到這種方法和正則表達式方法之間的一件事。這會在要返回的每個元素之間留出空間。而正則表達式之間只有一些空間。我也想看看你是如何測試這個我得到完全不同的結果。 – tinstaafl
我的測試字符串不像您使用的那麼長,並且還有一些其他標籤,如「
您可以使用以下內容。
string input = " There are<NONNATIVE/> not<NIS/> <NIS/> correct";
string output = Regex.Replace(input, @"((?> |<NIS\/>|<NONNATIVE\/>)*)\S?", "$1");
// " <NONNATIVE/> <NIS/> <NIS/> "
非常感謝,這種方式花費我每個數據0.0001s! –
謝謝!這種方法每個數據成本爲0.0005s。 –