C# 正则表达式 : Combine a look ahead regex and a look behind regex into one

标签 c# regex

我想使用正则表达式过滤掉不使用“\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/

相关文章:

c# - IEnumerable<T> 的 String.Join(string, string[]) 的模拟

c# - 访问 IRibbonExtensibility 类中的另一个功能区元素

sql - 如何使用正则表达式更新 SQL 表记录

javascript - PhpStorm 替换为 js 正则表达式

python - 具有多行和 HTML 标签的正则表达式

javascript - 用于匹配共享相同格式部分的 URL 的正则表达式

c# - 延迟构建请求

c# - C# 中的连接与 Access 数据库的 SQL 查询

c# - 如何从 aspx 页面访问 silverlight 控件的属性和方法?

python - 单独查找正则表达式匹配