2017-08-17 116 views
2

我能写一个找出字符串中的6位数字的代码,并将其复制到下一列,但我想补充的搜索也可以找到与模式##-####和拷贝数它进入下一栏,下面的例子:VBA Excel在字符串中寻找数字模式

Example

有人可以帮我吗?

Sub Pull_6_Digit_Numbers_From_String() 


    Dim r As Range, i As Long 
    With CreateObject("VBScript.RegExp") 
     .Global = True 
     .Pattern = "\b\d{6}\b" 
     For Each r In Range("A1", Range("A" & Rows.Count).End(xlUp)) 
      If .test(r.Value) Then 
       For i = 0 To .Execute(r.Value).Count - 1 
        r(, i + 2).Value = .Execute(r.Value)(i) 
       Next 
      End If 
     Next 
    End With 
+0

你的意思是你想扩展你目前的模式吗?尝试'\ b \ d {2} - ?\ d {4} \ b' –

+0

您是否遇到了模式问题? – SJR

回答

3

您当前的格局,\b\d{6}\b,匹配一个单词边界,然后连续6个数字,然后再一个单词边界。所以,它匹配123456text 123456 here。要匹配12-3456,您可以将模式分成2位和4位子模式,并插入可选的-模式-?

\b\d{2}-?\d{4}\b 

参见regex demo

-?的比赛1个或0连字符和\d{2}\d{4}将匹配所有在所有字之间的边界6个位数。

+0

明白了,谢谢Wiktor提供清晰透明的解释! – FotoDJ

+0

Wiktor,有没有一种方法可以用大写字母N开头的文本,并将3到6个字母或数字组合在一起,即。 N24或NX747或N35655V但它应该忽略N2或N8(N加上1个字符)或N1234567(N加上超过6个字符 – FotoDJ

+0

@FotoDJ:看来你想要么['\ BN [^ \ W _] {3,6 } \ b'](https://regex101.com/r/BWNSXg/2)或['\ bN [^ \ W_] {2,6} \ b'](https://regex101.com/r/ BWNSXg/3)。 –