[英]Ruby: check if a string is formatted in a very specific way
我正在嘗試編寫一段代碼,告訴用戶是否以特定方式格式化了字符串。 格式如下所示(是一個圓圈):
######\n
### ###\n
# #\n
# #\n
# #\n
# #\n
# #\n
### ###\n
######\n
\n
為了清楚起見,包括了換行符; #字符可以是現有字符類中的任何字符。
我想做的是檢查一個字符串(來自文件)是否包含一個或多個這些“圓圈”。 應該將多個圓圈分開,如下所示:
# #\n
### ###\n
######\n
\n
######\n
### ###\n
# #\n
所以這就是我嘗試過的:
isCircle = "( #{get_i}{6}\n"
isCircle += " #{get_i}{3} #{get_i}{3}\n"
isCircle += " #{get_i} #{get_i}\n"
isCircle +=("#{get_i} #{get_i}\n"*3)
isCircle += " #{get_i} #{get_i}\n"
isCircle += " #{get_i}{3} #{get_i}{3}\n"
isCircle = " #{get_i}{6}\n\n?)*"
isCircle = Regexp.new(isCircle)
(get_i是一種返回上述字符類,正確轉義的字符以及所有內容的方法)
但是,當針對不正確的輸入字符串進行測試時,它仍然告訴我存在匹配項。 我在做錯什么,如何正確進行比賽?
這是你想做的嗎?
假設您要搜索此模式:
pattern =
%{ ######
### ###
# #
# #
# #
# #
# #
### ###
######
}
在文本文件中,其內容已讀入此字符串:
str =
%{###
##
######
### ###
# #
# #
# #
# #
# #
### ###
######
#######
######
######
### ###
# #
# #
# #
# #
# #
### ###
######
###
}
只需使用String#scan :
puts str.scan(pattern).join("\n")
######
### ###
# #
# #
# #
# #
# #
### ###
######
######
### ###
# #
# #
# #
# #
# #
### ###
######
相反,如果您希望模式開始處的str
的行偏移量:
sarr = str.lines
parr = pattern.lines
prows = parr.size
(sarr.size-prows+1).times.select { |i| sarr[i,prows] == parr }
#==> [2, 13]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.