我使用的是Ruby 2.1。我有这个逻辑,在更大的字符串中查找连续的字符串对
results = line.scan(/\b((\S+?)\b.*?\b(\S+?))\b/)
我的问题是,如何迭代结果列表并打印出两个字符串之间是否有三个或更多字符?例如,如果我的字符串是
"abc def"
上面会产生
[["abc def", "abc", "def"]]
我想知道" abc"之间是否有三个或更多字符?和" def。"
答案 0 :(得分:3)
对中间的空格使用量词:\b((\S+?)\b\s{3,}\b(\S+?))\b
此外,内部边界并不是真正需要的:
\b((\S+?)\s{3,}(\S+?))\b
答案 1 :(得分:0)
检查此问题的直接方法是运行单独的正则表达式:
results.select!{|x|p x[/\S+?\b(.*?)\b\S+?/,1].size}
将打印每一组的大小。
另一种方法是获取捕获的组的大小并减去它们:
results = []
line.scan(/\b((\S+?)\b.*?\b(\S+?))\b/) do |s, group1, group2|
results << $~ if s.size - group1.size - group2.size >= 3
end