【问题标题】:Check if string starts with regex in ruby to match "[NATURAL NUMBER]"检查字符串是否以 ruby​​ 中的正则表达式开头以匹配“[NATURAL NUMBER]”
【发布时间】:2016-08-27 02:01:15
【问题描述】:

假设我有以下字符串:

str1 = "[1] : blah blah blah"
str2 = "[2] : Something"
str3 = "Nothing"

我编写了一个方法foo(str),它接受一个字符串作为参数,如果字符串以“[DIGIT]”开头,其中数字可以是任何自然数(1、2、3、4...),则应该返回true。所以str1str2 应该返回true。 str3 应该返回 false。

我无法找出匹配"[DIGIT]" 的正则表达式。 /[[\d]]/ 是我能想到的最好的,它不起作用,只匹配 "N]",错过了起始括号。试试看here

目前该方法如下所示:

def foo(str)
  str =~ /[[\d]]/
end

【问题讨论】:

  • 你必须转义方括号,\[\d\] 应该匹配方括号内的数字
  • 非常感谢。它有效:)
  • 将来考虑在选择答案之前等待更长时间(也许 > 2 小时)。快速选择可能会阻止其他答案并使那些仍在准备答案的人短路。关键是不要着急。
  • 还有更多。如果它必须位于字符串的开头,则需要在前面加上^。那么正则表达式将是/^\[\d+\]/
  • @sin、^$ 的开始和结束锚点,而\A\z 是开始和结束string 锚的结尾。虽然两者都可以用于单行字符串,但我认为在这种情况下使用后者更清楚。

标签: ruby regex


【解决方案1】:

试试this,加上斜线:

$> irb
>> str1 = "[1] : blah blah blah"
>> str1[/\[\d\]/]
=> "[1]"

使用\ 字符转义正则表达式中具有特殊含义的字符。

【讨论】:

  • 您也可以使用\[\d]。我可能会使用\[\d+]
  • @NullUserException 谢谢,我不是正则表达式专家,只知道特殊字符。
  • "...如果字符串 ...开头,则返回 true。转义 ] 以禁止显示警告消息。
  • 嗨,刚刚发现\[\d\] 不适用于任何大于 9 的数字。例如,它与 "[10] : blah blah blah" 不匹配试试这个:rubular.com/r/Veyrxok6Nn
  • @dhrubo_moy 您可以将您的表达式修复为/\[\d+\]/,这允许多个数字。来自 rubular 快速参考:a+ 一个或多个 a
【解决方案2】:

您不必使用正则表达式。

def starts_with_you_know_what(str)
  str[0] == '[' && '0123456789'.include?(str[1]) && str[2] == ']'
end

starts_with_you_know_what "[1] : blah blah blah" #=> true
starts_with_you_know_what "[2] : Something"      #=> true
starts_with_you_know_what "Nothing"              #=> false

【讨论】:

    猜你喜欢
    • 2017-07-24
    • 2012-08-05
    • 2014-08-15
    • 2011-01-08
    • 1970-01-01
    • 2011-12-10
    • 2014-02-20
    • 2016-07-12
    • 2015-04-27
    相关资源
    最近更新 更多