我有以下条件:
if "FIX_STRING 0,0,DYNAMIC_STRING" == "FIX_STRING #{integer_from_0_to_5},#{integer_from_0_to_5},#{DYNAMIC_STRING}"
true
else
false
end
如何像这样动态制作?
if "FIX_STRING 0,0,DYNAMIC_STRING" == "FIX_STRING #{/0|1|2|3|4|5/},#{/0|1|2|3|4|5/},#{/A|B|C|D/}"
true
else
false
end
答案 0 :(得分:2)
你在这里走的正确,但你有一种非常特殊的编码风格。首先要指出的是, str = "Google mail, Google Maps, Google drive, Google music, Google play, Google office"
str1 = Split(replace(str,",","")," ")
Set dic1 = CreateObject("Scripting.Dictionary")
On Error Resume next
For Each a in str1
dic1.Add a,"1"
If Err.Number <> 0 Then
dic1(a) = cstr(cint(dic1(a)) + 1)
err.clear
End If
Next
On Error Goto 0
repeatedwords = ""
For each keys in dic1
If cint(dic1(keys)) > 1 Then
repeatedwords = repeatedwords & vbNewline & vbNewline & keys & " repeated " & dic1(keys) & " times"
End If
Next
msgbox repeatedwords
Set dic1 = nothing
之类的比较已经返回了布尔值==
或true
,false
没有理由返回完全相同的if
的事情。
第二件事是你要将字符串与另一个字符串进行比较,所以他们必须完全匹配 。足够接近不算数。如果你评估你的其他字符串就会弄得一团糟:
"FIX_STRING (?-mix:0|1|2|3|4|5),(?-mix:0|1|2|3|4|5),(?-mix:A|B|C|D)"
最后,如果您正在尝试测试字符串与正则表达式,请执行以下操作:
PATTERN = /\AFIX_STRING [0-5],[0-5],[A-D]\z/
您可以在Rubular上测试此类事情以使其正确。这里[0-5]
表示该范围内的任何内容。这对你所拥有的东西来说是短暂的。
然后你可以测试任意字符串与这种模式:
"FIX_STRING 3,4,D".match(PATTERN)
# => #<MatchData "FIX_STRING 3,4,D">
匹配。
较新版本的Ruby有match?
方法只测试匹配,它不会返回匹配的内容,如果您在2.3或更高版本上运行,可能需要使用它。它比普通的match
方法更快,但只有在循环内部进行大量匹配才真正重要。