c# - 这个 Regex 是否应该做我期望的事情,即匹配 "A1:B10,C3,D4:E1000"?

标签 c# .net regex vb.net

我目前正在编写一个库,我希望允许用户在四种可能的备选方案下指定电子表格单元格:

  1. 单个单元格:"A1";
  2. 多个连续单元格:"A1:B10"
  3. 多个单独的单元格:"A1,B6,I60,AA2"
  4. 2 和 3 的混合:“B2:B12,C13:C18,D4,E11000”

然后,为了验证输入是否符合这些格式,我打算使用正则表达式进行匹配。我在维基百科上查阅了这篇文章:
Regular Expression (Wikipedia)

而且我还发现了这个相关的 SO 问题:
regex matching alpha character followed by 4 alphanumerics.

根据上述链接文章中提供的信息,我会尝试使用此正则表达式:

Default Readonly Property Cells(ByVal cellsAddresses As String) As ReadOnlyDictionary(Of String, ICell)
    Get
        Dim validAddresses As Regex = New Regex("A-Za-z0-9:,A-Za-z0-9")

        If (Not validAddresses.IsMatch(cellsAddresses)) then _
            Throw New FormatException("cellsAddresses")

        // Proceed with getting the cells from the Interop here...  
    End Get
End Property

Questions

<强>1。我的正则表达式正确吗?如果不正确,请帮助我了解我可以使用什么表达式。

<强>2。 FormatExceptionInvalidExpressionException 之间哪个异常更有意义? 我在这里犹豫,因为它与属性的格式有关期望输入单元格,除此之外,我正在使用(正则)表达式进行匹配。

感谢您的帮助和支持! =)

最佳答案

我会试试这个:

 [A-Za-z]+[0-9]+([:,][A-Za-z]+[0-9]+)*

解释:

  • 在 [] 之间是一个可能的字符组用于单个位置
  • [A-Za-z]表示从'A'到'Z'和'a'到'z'的字符(字母)
  • [0-9]表示0到9的字符(数字)
  • 附加到正则表达式一部分的“+”表示:重复一次或多次
  • “*”表示:重复前面的部分零次或多次。
  • ( ) 可以用来定义一个组

所以 [A-Za-z]+[0-9]+ 匹配一个或多个字母后跟一个或多个数字的单个单元格地址。
然后同一 block 重复零次或多次,地址用“,”或“:”分隔。

关于c# - 这个 Regex 是否应该做我期望的事情,即匹配 "A1:B10,C3,D4:E1000"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5248717/

相关文章:

c# - 如果进程作为文件类型的默认关联程序启动,则出现 InvalidOperationException

.net - Visual Studio 2010 中缺少 PostgreSQL 数据提供程序

替换R中模板字符串中的字母

c# - 违反唯一键约束 - 无法插入重复键

c# - 正则表达式跳过匹配

c# - 使用 WCF 为 IoC 配置 StructureMap(依赖注入(inject))

c# - 是否可以使用 RabbitMQ 和 gRPC 通过 .NET 对消息进行排队?

c# - 如何使用 .Net 获取符号链接(symbolic link)(或重解析点)的目标?

javascript - 将所有视频 anchor 实例替换为 iframe

php - 正则表达式 - 匹配(仅)具有混合字符的单词