C#實(shí)現(xiàn)字符串模糊匹配的方法小結(jié)
在C#中實(shí)現(xiàn)字符串的模糊匹配可以借助正則表達(dá)式或者一些模糊匹配算法來(lái)實(shí)現(xiàn)。
方法一:使用正則表達(dá)式
如果你的模糊匹配是基于簡(jiǎn)單的通配符(如*和?),可以通過(guò)正則表達(dá)式來(lái)實(shí)現(xiàn)。
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
string pattern = "he*o"; // 例如,模糊匹配模式
string input = "hello"; // 要匹配的字符串
// 將模糊匹配模式轉(zhuǎn)換為正則表達(dá)式
string regexPattern = "^" + Regex.Escape(pattern)
.Replace("\\*", ".*")
.Replace("\\?", ".") + "$";
// 使用正則表達(dá)式進(jìn)行匹配
if (Regex.IsMatch(input, regexPattern))
{
Console.WriteLine("字符串匹配成功!");
}
else
{
Console.WriteLine("字符串匹配失?。?);
}
}
}方法二:使用模糊匹配算法
如果你需要更復(fù)雜的模糊匹配(例如模糊搜索、近似匹配等),可以使用字符串相似度算法,如Levenshtein距離或者Jaccard相似度等。這些算法可以衡量?jī)蓚€(gè)字符串之間的相似程度,然后根據(jù)閾值判斷是否匹配。
以下是一個(gè)使用Levenshtein距離算法進(jìn)行模糊匹配的示例:
using System;
class Program
{
static void Main()
{
string pattern = "hello"; // 模糊匹配模式
string input = "heLlo"; // 要匹配的字符串
int threshold = 2; // 可接受的最大編輯距離
// 計(jì)算輸入字符串與模式字符串的編輯距離
int distance = ComputeLevenshteinDistance(input.ToLower(), pattern.ToLower());
// 如果編輯距離在閾值范圍內(nèi),則認(rèn)為匹配成功
if (distance <= threshold)
{
Console.WriteLine("字符串匹配成功!");
}
else
{
Console.WriteLine("字符串匹配失敗!");
}
}
// 計(jì)算Levenshtein距離的方法
static int ComputeLevenshteinDistance(string s, string t)
{
int n = s.Length;
int m = t.Length;
int[,] d = new int[n + 1, m + 1];
// 初始化邊界條件
for (int i = 0; i <= n; i++)
{
d[i, 0] = i;
}
for (int j = 0; j <= m; j++)
{
d[0, j] = j;
}
// 計(jì)算編輯距離
for (int j = 1; j <= m; j++)
{
for (int i = 1; i <= n; i++)
{
if (s[i - 1] == t[j - 1])
{
d[i, j] = d[i - 1, j - 1];
}
else
{
d[i, j] = Math.Min(d[i - 1, j] + 1, // 刪除
Math.Min(d[i, j - 1] + 1, // 插入
d[i - 1, j - 1] + 1)); // 替換
}
}
}
return d[n, m];
}
}以上代碼示例中,ComputeLevenshteinDistance方法計(jì)算了兩個(gè)字符串之間的Levenshtein距離,然后通過(guò)比較距離與設(shè)定的閾值來(lái)判斷是否匹配。
根據(jù)你的具體需求,選擇適合的方法來(lái)實(shí)現(xiàn)字符串的模糊匹配。
拓展:C# list 中字段的模糊查找匹配實(shí)現(xiàn)
在游戲中,關(guān)于在列表中 查找某行數(shù)據(jù)時(shí),需要通過(guò)關(guān)鍵字匹配,去遍歷表中的數(shù)據(jù),如果表中匹配到關(guān)鍵字,則返回該行數(shù)據(jù),沒(méi)有則返回null。比如查找在好友列表查找某個(gè)好友時(shí)。
建立一個(gè) data 數(shù)據(jù):用于保存item 的所有信息 (如: id,title,content,icon 等)
public class Data{
public int id;
public string name;
public string title;
public string content;
public string icon;
...
}實(shí)現(xiàn):
private List<Data> onFindKeyWord(string str, List<Data> list){
List<Data> m_list= new List<Data>();
int count = list.Count;
for(int i=0; i<count; i++){
Data data = list[i];
if(data.name.Indexof(str) != -1)
{
m_list.Add(data);
}
}
return m_list; // 返回新的列表,符合模糊查詢(xún)的結(jié)果列表
}用foreach 遍歷, 通過(guò)name模糊查找
private List<Data> onFindKeyWord(string str, List<Data> list){
List<Data> m_list= new List<Data>();
foreach(Data data in list)
{
if(data.name.Indexof(str) != -1){
m_list.Add(data);
}
}
return m_list;
}使用 list.Find(); 通過(guò)name 精確查找,不存在返回null
private List<Data> onFindKeyWord(string str, List<Data> list){
List<Data> m_list= new List<Data>();
Data data = list.Find(m_data=> m_data == str);
// 需要判斷是否存在
if(data != null){
m_list.Add(data);
}
return m_list;
}到此這篇關(guān)于C#實(shí)現(xiàn)字符串模糊匹配的方法小結(jié)的文章就介紹到這了,更多相關(guān)C#字符串模糊匹配內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#使用iText獲取PDF的trailer數(shù)據(jù)的代碼示例
開(kāi)發(fā)程序debug的時(shí)候,看到了PDF有個(gè)trailer數(shù)據(jù),挺有意思,于是考慮用代碼把它讀出來(lái),那么就用到我們常用的iText框架了,所以本文將詳細(xì)介紹C#使用iText獲取PDF的trailer數(shù)據(jù)的方法步驟,需要的朋友可以參考下2025-09-09
C#簡(jiǎn)單獲取全屏中鼠標(biāo)焦點(diǎn)位置坐標(biāo)的方法示例
這篇文章主要介紹了C#簡(jiǎn)單獲取全屏中鼠標(biāo)焦點(diǎn)位置坐標(biāo)的方法,涉及C#針對(duì)鼠標(biāo)位置Position屬性的簡(jiǎn)單操作技巧,需要的朋友可以參考下2017-07-07
C#實(shí)現(xiàn)textbox文本多行輸出且自動(dòng)換行輸出
在WinForms中通過(guò)設(shè)置TextBox的Multiline和WordWrap屬性實(shí)現(xiàn)多行輸出且自動(dòng)換行,可以通過(guò)設(shè)計(jì)器或代碼設(shè)置以上兩個(gè)屬性,文本輸出方法包括直接賦值、追加文本和循環(huán)輸出,完整示例代碼展示了設(shè)計(jì)器設(shè)置后的代碼實(shí)現(xiàn),需要的朋友可以參考下2026-04-04
C#利用System.Uri轉(zhuǎn)URL為絕對(duì)地址的方法
這篇文章主要介紹了C#利用System.Uri轉(zhuǎn)URL為絕對(duì)地址的方法,涉及C#操作URL的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-02-02
C#實(shí)現(xiàn)將字符串轉(zhuǎn)換成日期格式的方法
這篇文章主要介紹了C#實(shí)現(xiàn)將字符串轉(zhuǎn)換成日期格式的方法,涉及C#操作時(shí)間及字符串的相關(guān)技巧,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下2015-05-05
C# LINQ查詢(xún)表達(dá)式及對(duì)應(yīng)LAMBDA表達(dá)式的用法
這篇文章主要介紹了C# LINQ查詢(xún)表達(dá)式及對(duì)應(yīng)LAMBDA表達(dá)式的用法,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下2021-04-04
C# List.Distinct() 去重問(wèn)題解決
本文主要介紹了C# List.Distinct() 去重問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2026-01-01

