我目前正在编写一个库,我希望允许用户在四种可能的备选方案下指定电子表格单元格:
- 单个单元格:
"A1"
; - 多个连续单元格:
"A1:B10"
- 多个单独的单元格:
"A1,B6,I60,AA2"
- 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。 FormatException
和 InvalidExpressionException
之间哪个异常更有意义? 我在这里犹豫,因为它与属性的格式有关期望输入单元格,除此之外,我正在使用(正则)表达式进行匹配。
感谢您的帮助和支持! =)
最佳答案
我会试试这个:
[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/