我有一个复杂的分组正则表达式,但在 RegExp 5.5 中,匹配的子匹配作为字符串返回,没有暴露于 .FirstIndex 和 .Length。捕获的字符串不是唯一的。
正则表达式:
([A-Z]+)\s+\[A-Z]?\s+(\d{3})\-(\d{3})\s+([A-Z]?)\-([A-Z]?)
示例文本:
BLAHBLAH A 100-100 A-A
BLAH 101-101 A-
输出:
0:BLAHBLAH 0:BLAH
1:100 1:101
2:100 2:101
3:A 3:A
4:A 4:
目前,我遍历子匹配,搜索子字符串,找到位置,用空格替换:
Dim ub as Long: ub = MatchCollection.Matches(0).Submatches.Count-1
Dim fi() as Long, ln() as Long: Redim fi(ub): Redim ln(ub)
For i = 0 to ub
fi(i) = Clng(Instr(1, Text, MatchCollection.Matches(0).Submatches(i))
ln(i) = Clng(Len(MatchCollection.Matches(0).Submatches(i))
Mid(Text, fi(i), ln(i)) = String$(ln(i), Chr(32))
Next i
这显然不适用于第一个示例字符串,因为正则表达式未捕获 A 的第一次出现。
任何想法都非常感谢!