在本主题中,我们的想法是采取" strip"数字,通过RegEx除以x
。 - > How to extract ad sizes from a string with excel regex
因此来自:
uni3uios3_300x250_ASDF.html
我想通过RegEx实现:
300x250
我已经设法达到了完全相反的目标,我正在努力争取一些时间来完成需要做的工作。 这就是我现在所拥有的:
Public Function regExSampler(s As String) As String
Dim regEx As Object
Dim inputMatches As Object
Dim regExString As String
Set regEx = CreateObject("VBScript.RegExp")
With regEx
.Pattern = "(([0-9]+)x([0-9]+))"
.IgnoreCase = True
.Global = True
Set inputMatches = .Execute(s)
If regEx.test(s) Then
regExSampler = .Replace(s, vbNullString)
Else
regExSampler = s
End If
End With
End Function
Public Sub TestMe()
Debug.Print regExSampler("uni3uios3_300x250_ASDF.html")
Debug.Print regExSampler("uni3uios3_34300x25_ASDF.html")
Debug.Print regExSampler("uni3uios3_8x4_ASDF.html")
End Sub
如果你运行TestMe
,你会得到:
uni3uios3__ASDF.html
uni3uios3__ASDF.html
uni3uios3__ASDF.html
这正是我想通过RegEx剥离的东西。
答案 0 :(得分:8)
将IF
块更改为
If regEx.test(s) Then
regExSampler = InputMatches(0)
Else
regExSampler = s
End If
您的结果将会返回
300x250
34300x25
8x4
这是因为InputMatches
保存了RegEx
执行的结果,它保存了您匹配的模式。
答案 1 :(得分:3)
根据OP的要求,我将此作为答案发布:
<强>解决方案强>:
^.*\D(?=\d+x\d+)|\D+$
演示:regex101.com
<强>解释强>:
^.*\D
- 这里我们匹配字符串开头的每个字符,直到达到非数字(\D
)字符。 (?=\d+x\d+)
- 这是一个积极的前瞻。这意味着前一个模式(^.*\D
)只应匹配,如果后面跟着它描述的模式(\d+x\d+
)。前瞻本身不会捕获任何字符,因此正则表达式不会捕获模式\d+x\d+
。
\d+x\d+
- 这个应该很容易理解,因为它等同于[0-9]+x[0-9]+
。如您所见,\d
是代表任何数字字符的标记。
\D+$
- 此模式匹配一个或多个非数字字符,直到它到达字符串的末尾。|
)链接,以便整个正则表达式匹配一种模式或另一种模式。