使用正则表达式的异常问题

时间:2017-07-25 15:09:49

标签: c# regex winforms

我有这行代码:

textBox1.Text = Regex.Replace(textBox1.Text, "(?:\r\n)+", "  \r\n");

基本上在换行符之前为该行添加了一个双空格键:

输入

a

b
c
d

e

输出

a  //<--- Double spacebar after the 'a' character
b  //<--- Double spacebar after the 'b' character
c  //<--- Double spacebar after the 'c' character
d  //<--- Double spacebar after the 'd' character
e

对于像这样的页面或reddit的某些格式化目的,它需要前一行中的双断行或双空格键以及之后的单行换行以在其格式中创建一个新行

无论如何,这是有效的,但问题是如果你已经有一个双重空格键,它只是不断添加并导致一个行太多的空格键,这是不必要的,因为你只需要2来工作

所以我尝试用[^]做一个异常,如果它之前已经有一个双空格键,则不应该考虑该规则,如下所示:

(?:[^  ]\r\n)+

但它不起作用?

输入

a

b
c  //<---- Double spacebar before the line break to check if it ignores it
d

e

输出

//&lt; ---双空格键在这里??

//&lt; ---空白行,没有任何内容

//&lt; ---双空格键在这里??

c //&lt; ---这里是双空格键??

//&lt; ---双空格键在这里??

ë

为什么呢?怎么了?非常感谢你

1 个答案:

答案 0 :(得分:3)

正确的正则表达式:(?: )?\r\n

需要考虑的一些要点:

  1. 如果你真的想要&#34;崩溃&#34;将多个换行符合并为原始正则表达式提示(使用+符号),然后将我的整个正则表达式包装在一个带有加号的非捕获组中:(?:(?: )?\r\n)+
  2. 是的,我的正则表达式会用完全相同的东西替换双空格换行符,但这比添加额外的空格更好,更好。正如你所提到的那样。
  3. 多次向字符类(使用[方括号])添加相同的字符没有意义。因此[ ][ ]相同,这意味着&#34;匹配空格或空格或空格......&#34;。