【问题标题】:Match everything besides an empty line or lines containing only whitespaces匹配除空行或仅包含空格的行之外的所有内容
【发布时间】:2015-08-27 14:29:19
【问题描述】:

匹配所有遵循这些规则的行的最简单方法是什么:

  1. 该行不为空
  2. 该行不仅包含空格

我找到了一个只匹配空行或只包含空格的表达式,但我无法反转它。这是我发现的:^\s*[\r\n]

是否可以简单地反转正则表达式?

非常感谢!

【问题讨论】:

  • \S 表示找到的行不为空,也表示至少包含一个非空白字符。最好的办法是使用这个正则表达式 grep 行。

标签: regex


【解决方案1】:

要匹配非空行,您可以使用以下正则表达式并启用多行模式(感谢@Casimir 对字符类进行更正):

^[^\S\r\n]*\S.*$

行尾与匹配除换行符以外的任何字符的.* 一起使用。

demo

要检查该行是否不是空格(但不匹配),请使用简化版本:

^[^\S\r\n]*\S

another demo

[^\S\r\n]* 匹配除非空格、回车和换行符之外的 0 个或多个字符。 \S 匹配非空白字符。

顺便说一句,如果你用 C# 编码,你不需要正则表达式来检查字符串是否为空格,因为有 String.IsNullOrWhiteSpace,只需将多行字符串与 str.Split(new[] {"\r\n"}, StringSplitOptions.None) 分割。

【讨论】:

  • 同理可以使用^[^\S\r\n]*\S
  • @CasimiretHippolyte:是的,用于检查该行是否不是空格,就足够了
  • 我知道 c# 方式,我需要在数据库中使用它;)谢谢!
【解决方案2】:

只需验证至少有一个非空白字符:

^.*\S.*$

See it in action

解释:

  • 从开始 (^) 到结束 ($)
  • .* - 任意数量的任意字符
  • \S - 一个非空白字符

【讨论】:

  • 忘记/m,忘记旧注释
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-30
  • 1970-01-01
相关资源
最近更新 更多