如何在C#中使用单行代码替换字符串中的特殊字符?
用正则表达式简化C#字符串特殊字符替换操作
问题背景
已对C#字符串变量paragraph执行paragraph = paragraph.ToLower();操作,需要替换其中的特殊字符:!、.、,、;、'、"、?。当前采用多次调用Replace方法的方式实现,希望了解是否可以通过正则表达式等方式用单行代码完成替换。
原始字符串
string paragraph = "L, P! X! C; u! P? w! P. G, S? l? X? D. w? m? f? v, x? i. z; x' m! U' M! j? V; l. S! j? r, K. O? k? p? p, H! t! z' X! v. u; F, h; s? X? K. y, Y! L; q! y? j, o? D' y? F' Z; E? W; W' W! n! p' U. N; w? V' y! Q; J, o! T? g? o! N' M? X? w! V. w? o' k. W. y, k; o' m! r; i, n. k, w; U? S? t; O' g' z. V. N? z, W? j! m? W! h; t! V' T! Z? R' w, w? y? y; O' w; r? q. G, V. x? n, Y; Q. s? S. G. f, s! U? l. o! i. L; Z' X! u. y, Q. q; Q, D; V. m. q. s? Y, U; p? u! q? h? O. W' y? Z! x! r. E, R, r' X' V, b. z, x! Q; y, g' j; j. q; W; v' X! J' H? i' o? n, Y. X! x? h? u; T? l! o? z. K' z' s; L? p? V' r. L? Y; V! V' S. t? Z' T' Y. s? i? Y! G? r; Y; T! h! K; M. k. U; A! V? R? C' x! X. M; z' V! w. N. T? Y' w? n, Z, Z? Y' R; V' f; V' I; t? X? Z; l? R, Q! Z. R. R, O. S! w; p' T. u? U! n, V, M. p? Q, O? q' t. B, k. u. H' T; T? S; Y! S! i? q! K' z' S! v; L. x; q; W? m? y, Z! x. y. j? N' R' I? r? V! Z; s, O? s; V, I, e? U' w! T? T! u; U! e? w? z; t! C! z? U, p' p! r. x; U! Z; u! j; T! X! N' F? n! P' t, X. s; q";
当前实现方式
paragraph = paragraph.ToLower(); paragraph = paragraph.Replace(".", " "); paragraph = paragraph.Replace(",", " "); paragraph = paragraph.Replace("!", " "); paragraph = paragraph.Replace("?", " "); paragraph = paragraph.Replace(";", " "); paragraph = paragraph.Replace("'", " "); paragraph = paragraph.Replace("'\"", " "); paragraph = paragraph.Replace("\"", " ");
解决方案
完全可以通过正则表达式的Regex.Replace方法实现单行代码替换,无需多次调用Replace:
基础实现(替换单个特殊字符为空格)
using System.Text.RegularExpressions; // 若已执行ToLower,直接替换 paragraph = Regex.Replace(paragraph, @"[!.,;'""]", " "); // 也可以合并ToLower操作 paragraph = Regex.Replace(paragraph.ToLower(), @"[!.,;'""]", " ");
优化实现(合并连续空格)
如果希望将多个连续替换产生的空格合并为单个空格,可修改正则匹配规则,匹配一个或多个目标特殊字符:
paragraph = Regex.Replace(paragraph, @"[!.,;'""]+", " ");
代码说明
- 正则表达式中的
[!.,;'""]是字符类,表示匹配括号内的任意一个特殊字符; - 在C#的逐字字符串(
@前缀)中,双引号需要用""表示单个双引号,因此正则模式里的'"'对应单引号,""对应双引号; - 后缀
+表示匹配前面的字符类一次或多次,从而将连续的特殊字符替换成单个空格,避免出现多个连续空格的情况。
内容的提问来源于stack exchange,提问作者Chiranjib Kundu
相关产品推荐
相关产品推荐

