假设我有以下字符串变量:
s1="10$"
s2="10$ I am a student"
s3="10$Good"
s4="10$ Nice weekend!"
如上所述,s2
和s4
在10$
之后有空格。
一般情况下,我希望有一种方法可以检查字符串是否与10$
一起开始,并且在 {{1}之后有空格}。例如,在我的上述情况下,规则应该找到10$
和s2
。如何定义这样的规则来检查一个字符串是否以'10 $'开头并且在?之后有空格?
我的意思是像s4
这样的东西应该返回true或false来判断它是否是匹配的字符串。
----------更新-------------------
如果使用s2.RULE?
代替10#
答案 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[\$#] +/