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

Posted

技术标签:

【中文标题】使用正则表达式的异常问题【英文标题】:Trouble with exceptions using regex 【发布时间】:2017-12-31 14:40:50 【问题描述】:

我有这行代码:

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

输出

//

//

//

c //

//

e

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

【问题讨论】:

【参考方案1】:

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

需要考虑的几点:

    如果您确实想将多个换行符“折叠”为一个作为原始正则表达式提示(使用 + 号),然后将我的整个正则表达式包含在一个非捕获组中并加上一个加号:(?:(?: )?\r\n)+ 是的,我的正则表达式将用完全相同的内容替换双空格换行符,但这没问题,而且比添加额外空格更好,正如您所提到的。 将同一个字符多次添加到字符类(使用 [括号])没有任何意义。所以[ ][ ] 相同,意思是“匹配空格或空格或空格...”。

【讨论】:

哦,好的,非常感谢:) 现在可以了,感谢您解释得这么清楚,我现在明白了,再次感谢!!!

以上是关于使用正则表达式的异常问题的主要内容,如果未能解决你的问题,请参考以下文章

使用正则表达式解析 Oracle 脚本

带有子模式异常的正则表达式模式 (Python)

Python 匹配具有指定异常的正则表达式

正则表达式匹配我的模式抛出异常

我可以在不抛出异常的情况下测试正则表达式在 C# 中是不是有效吗

正则表达式匹配 2 个路由的 Django NoReverseMatch 异常