【问题标题】:Regex: don't match if string contains whitespace正则表达式:如果字符串包含空格,则不匹配
【发布时间】:2010-01-07 12:46:38
【问题描述】:

我似乎无法找出匹配字符串的正则表达式模式,前提是它不包含空格。例如

"this has whitespace".match(/some_pattern/)

应该返回 nil 但是

"nowhitespace".match(/some_pattern/)

应该返回带有整个字符串的 MatchData。任何人都可以提出上述解决方案吗?

【问题讨论】:

  • 您是在尝试确定字符串是否包含空格,或者字符串是否包含特定模式但仅在没有空格的情况下?
  • 如果字符串包含空格,我基本上希望 match 返回 nil 。

标签: ruby regex


【解决方案1】:

我认为在 Ruby 中会是

/^\S*$/

这意味着“开始,匹配任意数量的非空白字符,结束”

【讨论】:

  • 啊!我在最后错过了行尾锚。干杯!
  • @Bart,注意\n\r 也被视为空白字符。
  • 您可能需要/\A\S*\Z/,因为这将匹配字符串的开头和结尾,而不是行的开头和结尾。 "lineone\nlinetwo"/^\S*$/ 匹配将返回 "lineone"
  • 我不必担心我的应用程序中的多行字符串,但这是一个很好的观点 - 谢谢。
  • /^\S*$/m 怎么样,其中 m 开启多行模式? :)
【解决方案2】:

您总是可以搜索 个空格,然后否定结果:

"str".match(/\s/).nil?

【讨论】:

    【解决方案3】:
    >> "this has whitespace".match(/^\S*$/)
    => nil
    >> "nospaces".match(/^\S*$/)
    => #<MatchData "nospaces">
    

    ^ = 字符串开头

    \S = 非空白字符,* = 0 或更多

    $ = 字符串结束

    【讨论】:

      【解决方案4】:

      不确定您是否可以以一种模式执行此操作,但您可以执行以下操作:

      "string".match(/pattern/) unless "string".match(/\s/)
      

      【讨论】:

      • +1 用于以不同的方式思考问题...只要字符串不包含空格,问题就可以解释为匹配包含模式“x”的字符串...
      【解决方案5】:
         "nowhitespace".match(/^[^\s]*$/)
      

      【讨论】:

        【解决方案6】:

        你想要:

        /^\S*$/
        

        这表示“匹配字符串的开头,然后是零个或多个非空白字符,然后是字符串的结尾。”预定义字符类的约定是小写字母表示一个类,而大写字母表示它的否定。因此,\s 指的是空白字符,而\S 指的是非空白字符。

        【讨论】:

          【解决方案7】:

          str.match(/^\S*some_pattern\S*$/)

          【讨论】:

            猜你喜欢
            • 2020-12-19
            • 2020-08-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-01-15
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多