-2

我正在搜索一个 ruby​​ 正则表达式,它将验证以下格式的字符串:"A1:B2". 冒号左侧的字母介于A-之间F,而冒号右侧的字母介于A-之间Z,按字母顺序排列,不早于左侧的字母。

一些有效的例子是"A1:B2", "A3:B4", "A5:B6", "C2:D3"

一些无效的例子是"E1:A2", "B4:A3"

换句话说,考虑一个有 6 列和 n 行的 Excel 表格,因此A将覆盖四个单元格, , , 。FA1:B2A1A2B1B2

如果您发现任何与上述场景匹配的正则表达式,请告诉我。

4

2 回答 2

2

我相当肯定这不能仅用正则表达式来完成。您可能必须使用类似的东西/^([A-F])(\d):([A-Z])(\d)$/,然后将 $1 与 $3 以及 $2 与 $4 进行比较。

例子:

def validate(str)
    /^([A-F])(\d):([A-Z])(\d)$/.match(str) && $1 < $3 && $2 < $4 
end

(假设您只想在冒号的每一侧允许一个字母和一个数字。)

于 2012-09-11T15:16:15.890 回答
1

你不能用一个正则表达式来做到这一点。但是,您可以使用类似的东西来做到这一点

def validate(str)
  a,b = str.split(":")
  !(/([A-F])\d/ =~ a).nil? && !(/[#{$1}-Z]\d/ =~ b).nil?
end

解释:

第一个字符将被放入 $1 然后插入到第二个正则表达式中,这样您将始终与第一部分中的字符匹配。

例子:

1.9.2p290 :039 > validate("A1:B2")
 => true 
1.9.2p290 :040 > validate("B2:A1")
 => false 
于 2012-09-11T15:23:52.293 回答