我想使用正则表达式执行以下操作:
\f
,\r
,\t
,\v
将转换为空格)\n
可以,\n\n
也可以,但是\n\n\n
不允许,应该用\n\n
代替)。一些例子:
space-space => space
space-space-space => space
space-tab => space
space-tab-space => space
newline-newline => newline-newline
space-newline => newline
space-newline-newline => newline-newline
newline-space => newline
newline-space-newline => newline-newline
到目前为止,我唯一能想到的正则表达式是它,它正在删除所有连续的空格:
Regex.Replace(input, @"(\s)\s+", "$1");
答案 0 :(得分:1)
要匹配除换行符以外的任何空格,可以使用children
否定字符类。或者,Props
,但我更喜欢第一个,因为它可以移植到其他正则表达式引擎中。
现在,您可以使用一个正则表达式,该表达式将在除换行符之外的1+个空格的左侧和右侧匹配可选的换行符。然后,您可以检查是否有任何换行符被匹配,如果是,则省略匹配的空格,否则,用空格替换匹配项。然后,您将需要用两个换行符替换3个或更多换行符的任何块。
React.ComponentType
详细信息
Instance
-捕获第1组:可选换行符[^\S\n]
-除换行符外的1+个空格[\s-[\n]]
-捕获第2组:可选的换行符var result = Regex.Replace(input, @"(\n?)[^\S\n]+(\n?)", m =>
!string.IsNullOrEmpty(m.Groups[1].Value) || !string.IsNullOrEmpty(m.Groups[2].Value) // If any \n matched
? $"{m.Groups[1].Value}{m.Groups[2].Value}" // Concat Group 1 and 2 values
: " "); // Else, replace the 1+ whitespaces matched with a space
var final_result = Regex.Replace(result, @"\n{3,}", "\n\n"); // Replace 3+ \ns with two \ns
-3个或更多换行符。答案 1 :(得分:0)
一个简单的多步骤解决方案如下:
除换行符外的所有空白字符都必须转换为空格(即\ f,\ r,\ t,\ v将转换为空格)
output = Regex.Replace(input, "[\\f\\r\\t\\v ]+", " ");
上面的组中包含一个空格。
如果在空格前后加上换行符,则应删除该空格。
output = Regex.Replace(output, " \n", "\n");
output = Regex.Replace(output, "\n ", "\n");
以上两种可以改为使用String.Replace
风格:
output = output.Replace(" \n", "\n");
output = output.Replace("\n ", "\n");
甚至:
output = output.Replace(" \n", "\n").Replace("\n ", "\n");
除了换行符,字符串不能有两个或多个连续的空格。 换行符最多只能连续出现两次(即\ n可以,\ n \ n也可以,但是\ n \ n \ n不允许,应该用\ n \ n代替)。
output = Regex.Replace(output, "\n\n\n+", "\n\n");
顺便说一句。如果系统将\r\n
用于换行符,则抑制\r
字符可能会导致不良结果。