我正在搜索ruby regexp,它将以以下格式验证字符串:"A1:B2"
。冒号左侧的字母位于A
- F
之间,冒号的右侧位于A
- Z
之间,而不是字母顺序中的字母。左侧。
一些有效的例子是"A1:B2"
,"A3:B4"
,"A5:B6"
,"C2:D3"
。
一些无效的例子是"E1:A2"
,"B4:A3"
。
换句话说,考虑一个包含六列A
- F
和n行的Excel表格,因此A1:B2
将覆盖四个单元格A1
,{{1} },A2
,B1
。
如果您发现任何与上述情况匹配的正则表达式,请告诉我。
答案 0 :(得分: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
(假设你只想在冒号的每一边都允许一个字母和一个数字。)
答案 1 :(得分: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