字符串格式检查

时间:2011-11-18 14:42:20

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1

假设我有以下字符串变量:

s1="10$" 
s2="10$ I am a student"
s3="10$Good"
s4="10$       Nice weekend!"

如上所述,s2s410$之后有空格。

一般情况下,我希望有一种方法可以检查字符串是否与10$一起开始,并且在 {{1}之后有空格}。例如,在我的上述情况下,规则应该找到10$s2。如何定义这样的规则来检查一个字符串是否以'10 $'开头并且在?之后有空格?

我的意思是像s4这样的东西应该返回true或false来判断它是否是匹配的字符串。

----------更新-------------------

如果使用s2.RULE?代替10#

,请告诉解决方案

4 个答案:

答案 0 :(得分:4)

您可以使用Regular Expressions执行此操作(确切地说,Ruby具有Perl样式的正则表达式)。

# For ease of demonstration, I've moved your strings into an array
strings = [
  "10$",
  "10$ I am a student",
  "10$Good",
  "10$       Nice weekend!"
]

p strings.find_all { |s| s =~ /\A10\$[ \t]+/ }

正则表达式如下所示:

  • 开头和结尾的/告诉Ruby,其间的所有内容都是正则表达式的一部分
  • \A匹配字符串的开头
  • 10是逐字匹配的
  • \$表示匹配$逐字。我们需要转义它,因为$在正则表达式中具有特殊含义。
  • [ \t]+表示“至少匹配一个空格和/或标签”

所以这个正则表达式说“匹配每个以10$开头的字符串,后跟至少一个空格或制表符”。使用=~,您可以在Ruby中针对此表达式测试字符串。 =~将返回非零值,如果在if等条件中使用,则计算结果为true。

编辑:根据Asmageddon's建议更新了空白区域。

答案 1 :(得分:1)

这有效:

"10$ " =~ /^10\$ +/

并在nil时返回false,在0时返回true。感谢Ruby的规则,您可以直接使用它。

答案 2 :(得分:1)

使用像这样的正则表达式:

/10\$\s+/

修改

如果使用=〜进行匹配,请注意

  

=〜运算符返回字符串中的字符位置   比赛开始

因此它可能会返回0表示匹配。只返回nil意味着不匹配。

在ruby的正则表达式教程中查看示例http://www.regular-expressions.info/ruby.html

答案 3 :(得分:0)

如果您想继续使用 $ 进行处理,请尝试使用此正则表达式:

/^10[\$#] +/