刪除號碼時,我有一個包含以下代碼的函數:性能問題,從大的字符串
Text = Text.Where(c => !Char.IsDigit(c)).Aggregate<char, string>(null, (current, c) => current + c);
,但它是相當緩慢。無論如何,我可以加快速度嗎?
刪除號碼時,我有一個包含以下代碼的函數:性能問題,從大的字符串
Text = Text.Where(c => !Char.IsDigit(c)).Aggregate<char, string>(null, (current, c) => current + c);
,但它是相當緩慢。無論如何,我可以加快速度嗎?
試試這個正則表達式:
Text = Regex.Replace(Text, @"\d+", "");
\d+
不僅僅是\d
,因爲它一次刪除多個連續數字更高效。
是的,你可以使用Regex.Replace
:
Text = Regex.Replace(Text, "\\d", "");
正則表達式一個單一的數字相匹配。 Regex.Replace
將Text
字符串中的每個匹配項替換爲空字符串""
。
@TimPietzcker我不確定這兩者的相對效率,因爲它很大程度上取決於'Replace'函數的實現。 – dasblinkenlight
如果他不需要處理國際數字,'[0-9]'(10個字符)應該更快,因爲它覆蓋的字符範圍要比'\\ d'小(460個字符) – Esailija
@Esailija使(幾乎)沒有區別。普通表達式引擎中的字符類查找是高度優化的,大約需要O(1),即它獨立於字符類中的字符數。其他一切都會使正則表達式先驗無法使用。 –
所有這些連接可能會殺死你。最簡單的/最好的可能是一個正則表達式:
Text = Regex.Replace(Text, "\\d", "");
或者你可以嘗試做只有一個新的字符串實例:
Text = new string(Text.Where(c => !Char.IsDigit(c)).ToArray())
在這裏你去朋友:'文本= 「」;' – ChaosPandion
是你使用'Char.IsDigit'是因爲你需要處理國際數字還是因爲你不知道更好? – Esailija
該字符串只包含整數還是小數? – Steve