这是一个字符串,
test = "IXIVDL"
如何找到#34; I"之后的哪个角色?在字符串? 而且它是否只是" X"或" V"还是其他什么?
例如。
"IDXCN"
是无效字符串,因为"I"
id后跟"D"
"IXD"
是有效字符串,因为"I"
后跟"X"
"IVIX"
是有效字符串,因为"I"
后跟"V"
或"X"
"DIDIX"
是无效字符串,因为"I"
后跟"D"
"DXI"
有效
我不想要任何字符串输出。结果应为true或false或nil。
答案 0 :(得分:1)
def validate(str)
res = str.scan(/(?<=I).?/)
puts "String is #{(res-['X','V']).empty? ? "valid" : "invalid"}"
res.each do |c|
if c.empty?
puts "I at end of string is invalid"
else
puts "#{c} following I is #{c=~/[XV]/ ? "valid" : "invalid"}"
end
end
end
validate "IXIVDLIZRI"
String is invalid
X following I is valid
V following I is valid
Z following I is invalid
I at end of string is invalid
validate "IXIVDLIV"
String is valid
X following I is valid
V following I is valid
V following I is valid
/(?<=I)./
匹配“I”后的任何字符。 (?<=I)
是一个积极的看法。更改puts
消息以适应。
答案 1 :(得分:1)
以下是一种可以运行以测试字符串的方法,如果没有Invalid String
,则会输出I
,或者I
后面没有正确的字母指定。否则,它会输出Valid String, I is followed by...
您选择的任何字母。在这种情况下X
或V
def find_I(test)
index_of_I = test.split('').find_index { |letter| letter == 'I' }
if index_of_I.nil? || test[index_of_I + 1].nil?
return "Invalid String"
elsif test[index_of_I + 1] =~ /[XV]/
return "Valid String, I followed by #{test[index_of_I + 1]}"
else
return "Invalid String"
end
end
答案 2 :(得分:0)
检查正则表达式的工作原理:Class: Regexp
这应该可以解决您的疑问,请注意有效子字符串的索引在存在时如何返回:
'IXIVDL' =~ /I[XV]/ # returns 0
'IDXCN' =~ /I[XV]/ # returns nil
'IXD' =~ /I[XV]/ # returns 0
'IVIX' =~ /I[XV]/ # returns 2
如果您需要知道每个 I
后面是X
还是V
,您可以改为:
'DIDIX' =~ /I[^XV]/
返回有效字符串的nil
(注意它在字符串末尾接受I
。)
答案 3 :(得分:0)
这是最简单的解决方案。
def find_string_digits(str)
str =~ /IX/ || str =~ /IV/ ? true : false
end
它正在使用正则表达式来匹配字符串中的某个模式,在这种情况下,“X”是否直接跟随“I”,或者“V”是否紧跟在“I”之后,如果是,则返回true,否则返回false。另外,如果你想检查说'I'之后的第3个字母是'X',你会匹配/I..X/,依此类推。
希望有所帮助。