正则表达式,匹配除 \r \n 之外的所有内容作为普通字符

Posted

技术标签:

【中文标题】正则表达式,匹配除 \\r \\n 之外的所有内容作为普通字符【英文标题】:Regex, match everything except \r \n as normal character正则表达式,匹配除 \r \n 之外的所有内容作为普通字符 【发布时间】:2021-08-21 06:12:24 【问题描述】:

我在 C# 中使用正则表达式从文件中获取过滤的行。首先,我将整个 .txt 文件读入一个字符串。在这种情况下,代码在两行之间插入 \r\n。但目前这些不是特殊字符,只是普通的字符串。在一行中,数据由 * char 分隔。我的正则表达式正在一行的某个特殊“单元格”中寻找一些值,如果匹配,它必须在开头和结尾不带 \r\n 的情况下返回整行。 你能看看我的解决方案,给我一个提示,如何在没有 \r\n 的情况下获得匹配?

谢谢!

Regex solution

【问题讨论】:

你不能试试 System.IO.File.ReadAllLines() 并处理每一行而不是读取整个字符串的内容吗? 感谢您的提示,但迭代 trought 行比正则表达式过滤所需行要慢得多。 【参考方案1】:

试试这个:

(?<=\\r\\n|^(?!\\r\\n))[^*]*?[*](iLVL_DUMMY)[*](?:[^*]*?[*])+?(2020|2019)[^*]*?[*].*?(?=\\r\\n)

【讨论】:

谢谢,这正是我想要的!【参考方案2】:

您可以将[^\r\n] 添加到您的正则表达式的开头和结尾,例如 [^\\r\\n*]*?[*](iLVL_DUMMY)[*][^*]*?[*][^*]*?[*][^*]*?[*][^*]*?[*](2020|2019)[^*]*?[*].*?(?=\\r\\n)

【讨论】:

你好。谢谢你的提示!这就是我尝试过的,但我的问题是,如果第一个值(目前为 0.0000)包含 r 或 n,则直到 r 或 n 的字符将不匹配。我正在寻找一个解决方案,其中 \ 后跟 r 或 n。 第一个值以char开头r?好的,正则表达式是(?&lt;=(^|\\r\\n)).*?[*](iLVL_DUMMY)[*][^*]*?[*][^*]*?[*][^*]*?[*][^*]*?[*](2020|2019)[^*]*?[*].*?(?=\\r\\n) Unfurtunatelly,此信息未知,r 或 n 可以是字符串的一部分,但不是必需的。我从 RK_15 得到了正确的解决方案,感谢您的宝贵时间!

以上是关于正则表达式,匹配除 \r \n 之外的所有内容作为普通字符的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式:匹配除特定模式之外的所有内容

正则表达式 - 如何匹配除特定模式之外的所有内容

如何使用正则表达式选择除捕获组之外的所有内容?

正则表达式:匹配除“<”、“”和“%”之外的任何内容

正则表达式:匹配文本段落中除特定短语外的所有内容

正则表达式匹配除 5 之外的所有数字字符