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

Ruby 如何为Excel单元格范围编写正则表达式?,ruby,regex,excel,Ruby,Regex,Excel,我需要验证Ruby中是否存在Excel单元格范围,即:“A4:A6”。通过查看,我正在寻找的要求是: : 我不知道该如何为此生成RegExp。 我希望能对解决方案给出一个小的解释,而不是单纯的解决方案 额外的好处是检查范围是否限制在一行或一列内。我认为这超出了正则表达式的范围 我尝试了/[A-Z]+[0-9]+:[A-Z]+[0-9]+/这可以工作,但允许在末尾添加额外字符 这不起作用,因为它允许在开头或结尾添加额外的: “HELLOAA3:A7”。match(/\A[A-Z]+[0-9]+:[

我需要验证Ruby中是否存在Excel单元格范围,即:“A4:A6”。通过查看,我正在寻找的要求是:

我不知道该如何为此生成RegExp。 我希望能对解决方案给出一个小的解释,而不是单纯的解决方案

额外的好处是检查范围是否限制在一行或一列内。我认为这超出了正则表达式的范围

我尝试了
/[A-Z]+[0-9]+:[A-Z]+[0-9]+/
这可以工作,但允许在末尾添加额外字符

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

“HELLOAA3:A7”。match(/\A[A-Z]+[0-9]+:[A-Z]+[0-9]+\Z/)
也会返回一个匹配项,但更加正确

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

这将实现两个功能:匹配Excel范围,并且它们必须是相同的行或列

这里的神奇之处在于后面的参考组:

([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

这将实现两个功能:匹配Excel范围,并且它们必须是相同的行或列

这里的神奇之处在于后面的参考组:

([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
这是我的解决方案:

(?:(?:\'?(?:\[(?<wbook>.+)\])?(?<sheet>.+?)\'?!)?(?<colabs>\$)?(?<col>[a-zA-Z]+)(?<rowabs>\$)?(?<row>\d+)(?::(?<col2abs>\$)?(?<col2>[a-zA-Z]+)(?<row2abs>\$)?(?<row2>\d+))?|(?<name>[A-Za-z]+[A-Za-z\d]*))
(?:(?:\”?(?:\[(?+)\])?(?+)\?)(?\$)((?[a-zA-Z]+)(?\$)(?\d+(?:(?\$)(?[a-zA-Z]+)(?\d+);(?[a-zA-Z]+[a-zA-Z]+[a-zA-Z-d]*))
它包括命名范围,但不支持R1C1表示法。 该模式是用perl兼容的regex方言编写的(也可以与C#一起使用),我不熟悉Ruby,所以我无法区分两者之间的区别,但您可能想看看这里:

这是我的解决方案:

(?:(?:\'?(?:\[(?<wbook>.+)\])?(?<sheet>.+?)\'?!)?(?<colabs>\$)?(?<col>[a-zA-Z]+)(?<rowabs>\$)?(?<row>\d+)(?::(?<col2abs>\$)?(?<col2>[a-zA-Z]+)(?<row2abs>\$)?(?<row2>\d+))?|(?<name>[A-Za-z]+[A-Za-z\d]*))
(?:(?:\”?(?:\[(?+)\])?(?+)\?)(?\$)((?[a-zA-Z]+)(?\$)(?\d+(?:(?\$)(?[a-zA-Z]+)(?\d+);(?[a-zA-Z]+[a-zA-Z]+[a-zA-Z-d]*))
它包括命名范围,但不支持R1C1表示法。
该模式是用与perl兼容的正则表达式方言编写的(也可以与C#一起使用),我不熟悉Ruby,所以我无法区分两者之间的区别,但您可能想看看这里:

您尝试了什么?你不想要奖金吗?:)请参见编辑2,它不起作用,因为如果我有任何额外内容:
AZ100:B65hello
仍然提供匹配项。我不理解“…范围限制在一行或一列内”的含义。你能举个例子吗?顺便说一句,当我第一次浏览你的问题时,我想我读了“奖金支票”,这让我非常兴奋。虽然我们想提供帮助,但我们需要一个更详细的输入数据示例。“似乎有效”是什么意思?你害怕什么警告?我的意思是:A1:A3在同一列中运行-允许,A1:C1在同一行中运行-允许,A1:C3在多个维度中运行-不允许你尝试过什么?你不想要奖金吗?:)请参见编辑2,它不起作用,因为如果我有任何额外内容:
AZ100:B65hello
仍然提供匹配项。我不理解“…范围限制在一行或一列内”的含义。你能举个例子吗?顺便说一句,当我第一次浏览你的问题时,我想我读了“奖金支票”,这让我非常兴奋。虽然我们想提供帮助,但我们需要一个更详细的输入数据示例。“似乎有效”是什么意思?你害怕什么警告?我的意思是:A1:A3在同一列中运行-允许,A1:C1在同一行中运行-允许,A1:C3在多个维度中运行-不允许创建解决方案!进一步讲,假设它有四个部分:
(col)(row):(col):(row)
。如何将这四个部分提取为四个变量?John,
“A5:B10”。scan/[A-Z]+|\d+/#=>[“A”、“5”、“B”、“10”]
将提供这些信息。这是一个很好的解决方案!进一步讲,假设它有四个部分:
(col)(row):(col):(row)
。如何将这四个部分提取为四个变量?John,
“A5:B10”。scan/[A-Z]+\d+/\35;=>[“A”、“5”、“B”、“10”]
将提供该信息。