我想使用正则表达式过滤掉不使用“\r\n”作为换行符的文件。例如,如果文件包含单个“\n”或单个“\r”,则将被过滤为不合格文件。
我已经找到了:
new Regex(@"(?<!\r)\n").Match(text).Success
这会告诉我文本是否有单个“\n”
并且:
new Regex(@"\r(?!\n)").Match(text).Success
这会告诉我文本是否有单个“\r”
目前我可以写:
!(new Regex(@"(?<!\r)\n").Match(text).Success) && !(new Regex(@"\r(?!\n)").Match(text).Success)
但是有什么办法可以将两者合二为一吗?
非常感谢。
最佳答案
首先,你永远不应该有一个领先的回顾断言。
根据文本的大小,这会增加 10 倍的速度惩罚
以及合法序列出现的频率。
因此,如果您以回顾断言开始,它实际上会测试每个字符
两次,一次用于断言,一次用于它之后的内容。
在现实中,你会想先找到它之后的那个,它会掉落
一步,提高效率。
为此,您可以交替组合。 \n(?<!\r\n)|\r(?!\n)
关于C# 正则表达式 : Combine a look ahead regex and a look behind regex into one,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42376148/