如何为Excel单元格范围编写正则表达式?

时间:2015-11-25 20:31:28

标签: ruby regex excel

我需要验证某些东西是Ruby中的Excel单元格范围,即:" A4:A6"。通过观察,我正在寻找的要求是:

<Alphabetical, Capitalised><Integer>:<Integer><Alphabetical, Capitalised>

我不知道如何为此形成一个RegExp。 对于解决方案,我希望得到一个小解释,而不是纯粹的解决方案。

奖励是检查范围是否限制在行或列内。我认为这将超出正则表达式的范围。

我已尝试/[A-Z]+[0-9]+:[A-Z]+[0-9]+/这可行,但最后允许使用额外的字符。

这不起作用,因为它允许将额外的内容添加到开头或结尾:

"HELLOAA3:A7".match(/\A[A-Z]+[0-9]+:[A-Z]+[0-9]+\z/)也会返回一个匹配,但更多的是在正确的轨道上。

如何将数字范围限制为10000? 如何将字符数限制为3?

2 个答案:

答案 0 :(得分:2)

这将同时执行以下操作:匹配Excel范围,并且它们必须是相同的行或列。 Stub

^([A-Z]+)(\d+):(\1\d+|[A-Z]+\2)$

A4:A6             // ok
A5:B10            // not ok
B5:Z5             // ok
AZ100:B100hello   // not ok

这里的魔力是反向引用组:

([A-Z]+)(\d+)     -- column is in capture group 1, row in group 2
(\1\d+|[A-Z]+\2)  -- the first column followed by any number; or
                  -- the first row preceded by any character

答案 1 :(得分:1)

这是我的解决方案:

./script.csh 
hello, argX

它包含命名范围,但不支持R1C1表示法。 该模式是用perl兼容的正则表达式方言编写的(即也可以与C#一起使用),我不熟悉Ruby,所以我不能区分它,但你可能想看看这里:{{ 3}}