如何判断正则表达式中的匹配项之间是否有三个或更多字符?

时间:2017-11-11 00:46:15

标签: regex ruby string

我使用的是Ruby 2.1。我有这个逻辑,在更大的字符串中查找连续的字符串对

results = line.scan(/\b((\S+?)\b.*?\b(\S+?))\b/)

我的问题是,如何迭代结果列表并打印出两个字符串之间是否有三个或更多字符?例如,如果我的字符串是

"abc      def"

上面会产生

[["abc      def", "abc", "def"]]

我想知道" abc"之间是否有三个或更多字符?和" def。"

2 个答案:

答案 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