从仅与正则表达式模式匹配的字符串中提取字符

时间:2019-11-28 01:34:37

标签: regex excel vba

我正在研究一个宏,以自动将电子表格数据重新格式化为可上传到广告服务器的导入表。

我正在导入具有严格命名约定的展示位置,仅允许以下字符:

a-z A-Z 0-9 _ + / \ - ( ) . : « » ~

我想查看一个代表展示位置名称的字符串,并替换上面找不到的任何字符。

因此,如果我的展示位置名称是:

apples?orange's*pears(300x250)

我希望结果看起来像这样

applesorangespears(300x250)

这是我目前拥有的:

 'test string
 placement_name = "test*123?test'456(300x250)"

'Allowed characters
regex_pattern = "a-zA-Z0-9_+/\\-().:«»~"

 If regex_pattern <> "" Then
    With regex
        .Global = True
        .Pattern = regex_pattern
    End With

    'Execute RegEx pattern on placement name
    Set regex_matches = regex.Execute(placement_name)

    If regex_matches.count > 0 Then
        For i = 0 To regex_matches.count - 1
            placement_name = regex_matches.Item(i).Value
        Next i
    End If
End If

但是当我运行它时,它将返回完整的展示位置名称,并且不会删除在正则表达式中找不到的字符。

有人可以提供任何指导来帮助我吗?我可以使用伪代码甚至口头建议。

谢谢!

1 个答案:

答案 0 :(得分:3)

Dim RegEx As Object
sStr = "apples?orange's*pears(300x250)"

Set RegEx = CreateObject("VBScript.RegExp")
RegEx.Global = True

RegEx.Pattern = "[^a-zA-Z0-9-\\().:«»~-]"

Debug.Print RegEx.replace(sStr, "")

您可以更改自己的RegEx模式,以防万一我错过了一些东西。