用正则expression式parsingExcel引用?
Excel将返回表单的引用
=Sheet1!R14C1R22C71junk
(“垃圾”通常不会在那里,但我想确保没有多余的文字。)
我想'拆分'成一个VB数组,在哪里
a(0)="Sheet1" a(1)="14" a(2)="1" a(3)="22" a(4)="71" a(5)="junk"
我敢肯定它可以用正则expression式来轻松完成,但我无法得到它的诀窍。 有一个善良的人可以帮助我吗?
谢谢
=([^!]+)!R(\d+)C(\d+)R(\d+)C(\d+)(.*)
应该pipe用。
[^!]+
匹配一系列非感叹号字符。
\d+
匹配一个数字序列。
.*
匹配任何东西。
所以,在VB.NET中:
Dim a As Match a = Regex.Match(SubjectString, "=([^!]+)!R(\d+)C(\d+)R(\d+)C(\d+)(.*)") If a.Success Then ' matched text: a.Value ' backreference n text: a.Groups(n).Value Else ' Match attempt failed End If
一个简单的String.Split
可以工作,只要“垃圾”文本不存在:
Dim input As String = "=Sheet1!R14C1R22C71" Dim result = input.Split(New Char() { "="c, "!"c, "R"c, "C"c }, StringSplitOptions.RemoveEmptyEntries) For Each item As String In result Console.WriteLine(item) Next
正则expression式有点棘手,因为你需要通过嵌套部分的组和捕获才能得到正确的顺序。
编辑:这是我的正则expression式的解决scheme。 它接受R和C的多次出现。
Dim input As String = "=Sheet1!R14C1R22C71junk" Dim pattern As String = "=(?<Sheet>Sheet\d+)!(?:R(?<R>\d+)C(?<C>\d+))+" Dim m As Match = Regex.Match(input, pattern) If m.Success Then Console.WriteLine(m.Groups("Sheet").Value) For i = 0 To m.Groups("R").Captures.Count - 1 Console.WriteLine(m.Groups("R").Captures(i).Value) Console.WriteLine(m.Groups("C").Captures(i).Value) Next End If
模式解释:
- “=(?Sheet \ d +)”:匹配一个=符号,后跟“Sheet”和数字。 使用命名组“Sheet”
- “!(?: R(?\ d +)C(?\ d +))+”:匹配感叹号,后面至less出现一次文本的* R * xx * C * xx部分。 使用“R”和“C”的命名组。
- “(?:…)+”:该部分与上述部分相匹配但不捕获内部图案(即,R / C部分)。 这是为了避免不必要的捕获,而我们实际上用指定的组捕获它们。
更一般的R1C1风格的正则expression式:
^=(?:(?<Sheet>[^!]+)!)?(?:R((?<RAbs>\d+)|(?<RRel>\[-?\d+\]))C((?<CAbs>\d+)|(?<CRel>\[-?\d+\]))){1,2}$
和A1风格:
^=(?:(?<Sheet>[^!]+)!)?(?:(?<Col1>\$?[az]+)(?<Row1>\$?\d+))(?:\:(?<Col2>\$?[az]+)(?<Row2>\$?\d+))?$
它不匹配外部引用,例如= [Book1] Sheet1!A1。
- VBA RegEx Excel – 打开多个patern匹配
- RegEx模式来标记除<img>之外的链接的空锚点
- 哪个正则expression式能够在C#中的公式中selectexcel列名?
- TCL_REGEXP ::如何使用TCL正则expression式从variables中search5个不同的单词。 如何发送输出到Excel表格的每一列?
- 使用喜欢比较一个string在Excel中
- 索引/匹配IF语句
- 正则expression式提取正好8位数字或正好7位数字的数字,如果数字有更多数字,则丢弃
- 如何构build正则expression式来查找单元格中的“”的不常见
- Excelmacros无法分离string地址