EXCEL进行模糊匹配(模拟查找功能)

模糊匹配,可以根据多个条件进行模糊匹配,filter函数可以匹配其他函数进行实现,比如下面这个公式,假设你在A列中有公司名称,在B列有其他信息,你想要找出包含“丽景”的所有公司名称和对应的信息。

=FILTER(A:B, ISNUMBER(SEARCH("丽景", A:A)))

这个公式会返回A列和B列中所有包含“丽景”的数据行

下面将这个公式分开解析一下

1、search函数的语法格式

SEARCH函数是Excel中常用的文本查找函数,它可以返回查找指定的文本字符在某个字符串中的位置。它的语法结构是=SEARCH(find_text,within_text,[start_num])

=search(find_text,within_text,start_num)

=search(要查找的字符,字符所在的文本,从第几个字符开始查找)

第三个参数可以省略(默认从第一个开始查找)。

注意问题:

1、函数不区分大小写(这也是SEARCH函数和FIND函数的区别,find函数区分大小写)

2、可以使用通配符问号?和星号* 。 问号匹配任意单个字符;星号匹配任意一串字符。 如果要查找实际的问号或星号,请在字符前键入波形符 (~)(find函数不可以使用通配符)

3、如果第2参数中没有包含第1参数,则结果会返回错误值 #VALUE!。如果开始查找的位置小于等于0或者大于第2参数文本的字符个数,SEARCH的结果也会返回错误值 #VALUE!。

具体实例可以看这个贴子

Excel中SEARCH函数的使用方法_search excel-优快云博客

2、ISNUMBER函数的公式:ISNUMBER(value)

该函数检测参数是否为数值型数字(纯数字),是则返回TRUE(真),否则返回FALSE(假)。

参数:value是判断对象,可为数字串,可为指定单元格的值,也可引用文本形式字符串,若value为纯数字串则返回TRUE,否则返回FALSE。

详细可以参考这篇文章

Excel的ISNUMBER函数及其用法-优快云博客

3、FILTER

filter(查询区域,条件,查不到结果返回的值)

注意条件是布尔表达式,这个条件为true,filter才返回结果,否则查不到结果。

一、单条件查询,返回多行多列记录

我们要查询“苹果”这个水果,使用公式:

=FILTER(A2:E14,D2:D14=“苹果”,"")

A2:E14为数据区域,D2:D14=H1orD2:D14=“苹果”,为查询条件,第三参数“”为查不到值返回空

二、多条件查询,或者(or)关系,返回多行多列

=FILTER(A2:E14,(D2:D14=H1)+(A2:A14=H2),"")
(D2:D14=H1)+(A2:A14=H2)这个参数是两个布尔表达式相加,但任意一个成立,结果就返回1,如果没有一个成立,结果返回0,所以用+连接。

三、多条件查询,并且(and)关系,返回多行多列

=FILTER(A2:E14,(D2:D14=H1)*(A2:A14=H2),"")
查询某个水果品种和地区的数据,(D2:D14=H1)*(A2:A14=H2),这是两个布尔表达式,如果都成立,结果为1,如果有一个不成立,结果返回0

四、查询一列在另外一列中不存在的数据

=FILTER(B2:B14,COUNTIF(D2:D6,B2:B14)=0,"")
COUNTIF(D2:D6,B2:B14)=0,是判断名单中不存在的,这样组合就查询到了未签到的人员。

五、在有重复值的列中提取唯一值

=UNIQUE(FILTER(D2:D14,A2:A14=G2,""))
先使用filter获取查询值,然后unique提取唯一的记录。

六、实现逆向查询

=FILTER(B2:B14,C2:C14=G2,"")

具体可以参考这个帖子

Excel函数 - Filter函数六种查询用法_filter可以查找部分行内容吗-优快云博客

<think>我们被要求回答关于模糊匹配字符的实现方法和技术原理,并且需要参考站内引用。根据引用[1],我们知道FuzzyWuzzy是一个用于模糊字符串匹配的Python库,它基于编辑距离等算法。引用[2]提到了MySQL中实现模糊匹配的方法,如LIKE和REGEXP操作符。引用[3]则提到了站内全文检索的模糊匹配技术方案。 根据这些引用,我们可以总结出模糊匹配的几种常见方法: 1. 基于编辑距离的算法(如Levenshtein距离) 2. 基于相似度度量的算法(如FuzzyWuzzy使用的部分匹配、标记排序等) 3. 基于模式匹配的字符串操作(如SQL中的LIKE和正则表达式) 4. 全文检索技术(如倒排索引、分词等) 我们需要将这些方法按照实现原理和技术细节进行整理,并给出清晰的解释。 注意:由于用户要求查找关于模糊匹配字符的技术信息,我们将重点放在字符串模糊匹配上,而不是数据库或全文检索系统,但可以简要提及这些应用场景。 回答结构: 1. 引言:模糊匹配的概念和应用场景 2. 核心算法与技术原理: a. 编辑距离算法(Levenshtein距离) b. 相似度度量(FuzzyWuzzy库中的方法) c. 模式匹配(正则表达式和通配符) d. 全文检索技术(倒排索引和分词) 3. 实现方法示例(可选代码或伪代码) 4. 总结 由于引用中提到了FuzzyWuzzy和MySQL的实现,我们将它们融入相应部分。 注意:我们不需要详细讲解FuzzyWuzzy库的使用,而是聚焦于其背后的原理。 另外,根据系统指令,我们需要使用LaTeX格式表示数学公式,并生成相关问题。 开始回答:</think>### 模糊匹配字符的实现方法与技术原理 模糊匹配的核心是处理文本的相似性而非精确相等,主要解决拼写错误、格式差异、缩写变形等问题。以下是关键技术与实现方法: --- #### 一、核心算法原理 1. **编辑距离(Levenshtein Distance)** 计算两字符串间的最小编辑操作次数(插入/删除/替换)。距离越小,相似度越高: $$ \text{相似度} = 1 - \frac{\text{编辑距离}}{\max(\text{len}(s1), \text{len}(s2))} $$ *示例*:`"kitten" → "sitting"` 的编辑距离为 3(替换 k→s, 替换 e→i, 插入 g)[^1]。 2. **N-gram 分词匹配** 将字符串拆分为长度为 $N$ 的连续子串(如 $N=2$ 时 `"apple" → ["ap", "pp", "pl", "le"]`),通过公共子串比例计算相似度: $$ \text{Jaccard 相似度} = \frac{| \text{grams}(s1) \cap \text{grams}(s2) |}{| \text{grams}(s1) \cup \text{grams}(s2) |} $$ 适用于处理词序错乱(如 `"quick brown"` vs `"brown quick"`)[^1]。 3. **余弦相似度(TF-IDF 向量化)** 将文本转为词频-逆文档频率向量,通过向量夹角余弦值度量相似性: $$ \cos(\theta) = \frac{\mathbf{A} \cdot \mathbf{B}}{\|\mathbf{A}\| \|\mathbf{B}\|} $$ 优势:可处理长文本和同义词(如 `"car"` vs `"automobile"`)[^3]。 --- #### 二、典型实现方法 | 方法 | 适用场景 | 工具/示例 | |--------------------|----------------------------------|--------------------------------------------------------------------------| | **编辑距离算法** | 短文本纠错(如搜索建议) | Python: `python-Levenshtein` 库 | | **N-gram 匹配** | 词序不敏感的快速匹配 | SQL: `WHERE SOUNDEX(col) = SOUNDEX('query')` | | **正则表达式** | 模式固定的模糊匹配 | MySQL: `WHERE name REGEXP '^[A-Za-z]{0,5}error'` [^2] | | **全文检索引擎** | 海量数据高效检索 | Elasticsearch: 基于倒排索引支持模糊查询(`fuzzy` 查询)[^3] | | **相似度评分库** | 多维度综合匹配(如实体解析) | Python FuzzyWuzzy: `fuzz.ratio("New York", "new-york")` → 91% [^1] | --- #### 三、技术选型建议 1. **轻量级场景**: - 使用编辑距离(< 1000 条数据) - SQL 的 `LIKE`/`REGEXP`(简单模式匹配)[^2] 2. **复杂场景**: - FuzzyWuzzy 综合算法(拼写纠错、缩写匹配)[^1] - 全文检索引擎(百万级以上数据)[^3] 3. **实时性要求**: - 预计算 N-gram 索引(如搜索引擎建议) --- #### 四、实战示例(Python) ```python from fuzzywuzzy import fuzz # 编辑距离应用 print(fuzz.ratio("apple", "appel")) # 输出: 86 # 部分匹配(忽略词序) print(fuzz.token_sort_ratio("apple pie", "pie apple")) # 输出: 100 # 加权匹配(公司名相似度) print(fuzz.WRatio("Google LLC", "Google Inc.")) # 输出: 95 ``` > 关键点:**模糊匹配 = 算法选择(编辑距离/N-gram/余弦相似度) + 场景适配(数据量/实时性/容错需求)**[^1][^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值