我正在使用Excel VBA中的正则表达式来解析游泳比赛的结果。代码读取从PDF复制的文本行,并将重要数据输出到单独的单元格中。由于源PDF中字符串的格式不同,因此正则表达式非常复杂。尽管如此,我目前能够解析95%的数据。
然而,有些未被解析的行令我感到困惑。显然,VBA无法通过正则表达式找到匹配项,但是当我将完全相同的正则表达式和字符串复制到this website时,JavaScript可以轻松找到匹配项。VBA和JavaScript在处理正则表达式方面是否存在差异可能会导致这种情况?
以下是VBA拒绝匹配的字符串:
然而,有些未被解析的行令我感到困惑。显然,VBA无法通过正则表达式找到匹配项,但是当我将完全相同的正则表达式和字符串复制到this website时,JavaScript可以轻松找到匹配项。VBA和JavaScript在处理正则表达式方面是否存在差异可能会导致这种情况?
以下是VBA拒绝匹配的字符串:
12. NUNEZ CHENG, Walter 74 Club Tennis Las Terr 3:44.57 123
这是我在Excel中使用的函数(大多数情况下都很成功):
Function singleLineResults(SourceString As String) As Variant
Dim cSubmatches As Variant
Dim collectionArray(11) As String
Dim cnt As Integer
Dim oMatches As MatchCollection
With New RegExp
.MultiLine = MultiLine
.IgnoreCase = IgnoreCase
.Global = False
'1. JAROSOVA, Lenka 27 Swimmpower Prague 2:26.65 605 34.45 37.70 37.79 36.71
.Pattern = "(\d*)\.?\s?([^,]+),\s([^\d]+)\s?(\d+)\s((?:[A-Z]{3})?)\s?((?:(?!\d\:\d).)*)\s?((?:\d+:)?\d+\.\d+)(?:\s(\d+))?(?:\s((?:\d+:)?\d+.\d+))?(?:\s((?:\d+:)?\d+.\d+))?(?:\s((?:\d+:)?\d+.\d+))?(?:\s((?:\d+:)?\d+.\d+))?(?:Splash Meet Manager 11, Build \d{5} Registered to [\w\s]+ 2014-08-\d+ \d+:\d+ - Page \d+)?$"
Set oMatches = .Execute(SourceString)
If oMatches.Count > 0 Then
For Each submatch In oMatches(0).SubMatches
collectionArray(cnt) = submatch '.Value
cnt = cnt + 1
Next
Else
singleLineResults = Null
End If
End With
singleLineResults = collectionArray()
End Function