【工具篇】通配符基础知识

【工具篇】通配符基础知识

1. 通配符的作用

通配符(Wildcards)是一种用于 模糊匹配字符串 的特殊符号,常用于文本搜索、文件名匹配、数据库查询(如 SQL)和编程中。通过组合通配符,可以灵活筛选或定位符合特定模式的数据。

2. 常用通配符类型

以下通配符适用于 VBA、Excel、Windows 文件搜索 等场景:

通配符描述示例匹配结果*匹配 任意数量字符(包括空字符)A*Apple, Art, A123?匹配 单个任意字符B?TBAT, B3T, Bet#匹配 单个数字(0-9)##-AB12-AB, 99-AB[ ]匹配 括号内的任意单个字符C[AT]TCAT, CTT[! ]匹配 不在括号内的任意单个字符D[!0-9]GDAG, DXG(非D0G、D1G)~将已经有的通配符转化为普通字符,相当于转义符fy06~?可以找到 fy06? fy06~* 可以找到 fy06*<单词的开头<(inster)可以查找到 interesting 和 intercept ,但是不能查找到 splintered>单词的结尾(in)>可以查找到 in和 within,但是不能查找到 interesting{n}重复前一个字符 n 次fe{2}d可以查找到 feed ,但是查找不到fed{n,}至少重复前一个字符 n 次fe{1,}d可以查找到 feed ,也可以查找到 fed{n,m}类似正则表达式中的数量描述,前一个字符至少出现n次,最多出现m次10{1,3}可以查找到 10,也可以查找到 100 和 1000@前一个字符至少出现n次,最多出现 1 次lo@t可以查找到 lot 和 loot

3. 通配符在不同场景中的应用

(1) VBA 中的通配符

在 VBA 中通过 Like 运算符使用通配符进行字符串匹配:

Sub WildcardExample()

Dim text As String

text = "Data123.xlsx"

' 判断是否以 "Data" 开头,后跟任意字符

If text Like "Data*" Then

MsgBox "匹配成功!"

End If

' 判断是否为 "Data" + 3个数字 + ".xlsx"

If text Like "Data###.xlsx" Then

MsgBox "符合格式"

End If

End Sub

(2) Excel 中的通配符

Excel 的筛选、查找或函数(如 COUNTIF, SUMIF)支持通配符:

筛选示例:

=COUNTIF(A:A, "A*") ' 统计以 A 开头的单元格数量

=SUMIF(B:B, "??-2023", C:C) ' 统计 B列中形如 "XX-2023" 对应的 C列之和

查找示例(按 Ctrl+F):

查找所有 .xlsx 文件:输入 *.xlsx查找第3个字符为 B 的文本:输入 ??B*

(3) 文件路径匹配

在 Windows 文件搜索或 VBA 中处理文件名:

' 删除临时文件(如 Temp1.txt, Temp2.doc)

Kill "C:\Temp\Temp?.*"

4. 高级用法

(1) 组合通配符

' 匹配以 "Report" 开头,后接1个字符 + "-2023" 的文件名

If fileName Like "Report?-2023.*" Then

' 处理文件...

End If

(2) 使用字符范围

' 匹配 "A" 或 "B" 开头,后跟一个数字的字符串

If text Like "[AB]#" Then

' 匹配 A1, B5 等

End If

' 匹配非数字结尾的字符串

If text Like "*[!0-9]" Then

' 如 "DataX", "FileA"

End If

5. 通配符 vs 正则表达式

特性通配符正则表达式复杂度简单复杂,功能强大语法符号*, ?, #, [ ]., \d, +, {n,m}, ^$适用场景简单模糊匹配(Excel、VBA)复杂模式匹配(如邮箱、电话校验)

6. 注意事项

区分大小写:在 VBA 中,Like 运算符默认区分大小写。可通过 Option Compare Text 设置不区分。转义特殊字符:若要匹配通配符本身(如 * 或 ?),需用 [] 包裹,例如 [*] 匹配字符 *。性能优化:在大数据集中频繁使用通配符可能降低效率,建议结合其他方法(如字典或数组缓存)。

7. 实际场景示例

需求:从 Excel 中提取所有形如 ABC-123(3字母+横线+3数字)的数据。

Sub ExtractData()

Dim cell As Range

For Each cell In Range("A1:A100")

If cell.Value Like "[A-Z][A-Z][A-Z]-###" Then

Debug.Print cell.Value

End If

Next cell

End Sub

通过合理使用通配符,可以大幅提升文本处理的灵活性和效率!

相关创意