How do you return a regex submatched group whilst ignoring spaces?
我在找一个regex的帮助。
我拥有的数据是由5个数字组成的组,用逗号分隔。所以,可能有这样的数据:
没有逗号的单个组:
任意数量的组:
1 2 | 12345,54321,56789,09876 12345,54321,56789 |
或者包含一些空格:
1 2 | " 12345 , 54321 , 56789 , 09876" "12345 , 54321 , 56789 , 09876" |
号
但它们始终是数字,并且始终以逗号分隔。
我需要的是一个regex,它将为整个模式返回一个匹配项,而不是为每个分隔组返回一个组,但我想忽略空白。
使用此字符串:
1 | " 12345 , 54321 , 56789 , 09876" |
这种模式,我已经设法做到了:
1 | ^(\s*\d{5})(?:\s*,\s*(\d{5})\s*)*$ |
。
但这又回来了:
1 2 3 | Full match " 12345 , 54321 , 56789 , 09876" Group 1. " 12345" Group 2. "09876" |
这里的问题是,空格仍然是完整的,组1匹配。还有中间两组失踪。
但是,它应该返回:
1 2 3 4 5 | Full match "12345,54321,56789,09876" Group 1. "12345" Group 2. "54321" Group 3. "56789" Group 4. "09876" |
。
忽略所有空格和附加的两个组。
如果有人能协助Regex模式,我们将不胜感激。
最后,我要寻找一个与vba兼容的regex模式,因为它最终会在这里被使用。
vba regex不允许存储与重复捕获组匹配的所有捕获值。
可以使用现有的regex验证字符串(可以删除捕获组以使其更精简),然后在匹配时,通过用逗号拆分字符串来获取一个值数组,然后在数组上迭代以修剪所有空白并将值放入集合中。
下面是VBA中的一个示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | Dim reg As RegExp Dim ms As MatchCollection Dim coll As Collection Dim tmpArr As Variant Dim s As String s =" 12345 , 54321 , 56789 , 09876" Set reg = New RegExp Set coll = New Collection With reg .Pattern ="^\s*\d{5}(?:\s*,\s*\d{5})*\s*$" End With Set ms = reg.Execute(s) ' Search for a match If ms.Count > 0 Then ' There is match tmpArr = Split(s,",") ' Split with comma For Each i In tmpArr ' Iterate over the array coll.Add (Trim(i)) ' Trim each item Next i End If |
。