C#實現(xiàn)字符串模糊匹配的方法小結
在C#中實現(xiàn)字符串的模糊匹配可以借助正則表達式或者一些模糊匹配算法來實現(xiàn)。
方法一:使用正則表達式
如果你的模糊匹配是基于簡單的通配符(如*
和?
),可以通過正則表達式來實現(xiàn)。
using System; using System.Text.RegularExpressions; class Program { static void Main() { string pattern = "he*o"; // 例如,模糊匹配模式 string input = "hello"; // 要匹配的字符串 // 將模糊匹配模式轉換為正則表達式 string regexPattern = "^" + Regex.Escape(pattern) .Replace("\\*", ".*") .Replace("\\?", ".") + "$"; // 使用正則表達式進行匹配 if (Regex.IsMatch(input, regexPattern)) { Console.WriteLine("字符串匹配成功!"); } else { Console.WriteLine("字符串匹配失敗!"); } } }
方法二:使用模糊匹配算法
如果你需要更復雜的模糊匹配(例如模糊搜索、近似匹配等),可以使用字符串相似度算法,如Levenshtein距離或者Jaccard相似度等。這些算法可以衡量兩個字符串之間的相似程度,然后根據閾值判斷是否匹配。
以下是一個使用Levenshtein距離算法進行模糊匹配的示例:
using System; class Program { static void Main() { string pattern = "hello"; // 模糊匹配模式 string input = "heLlo"; // 要匹配的字符串 int threshold = 2; // 可接受的最大編輯距離 // 計算輸入字符串與模式字符串的編輯距離 int distance = ComputeLevenshteinDistance(input.ToLower(), pattern.ToLower()); // 如果編輯距離在閾值范圍內,則認為匹配成功 if (distance <= threshold) { Console.WriteLine("字符串匹配成功!"); } else { Console.WriteLine("字符串匹配失??!"); } } // 計算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; } // 計算編輯距離 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
方法計算了兩個字符串之間的Levenshtein距離,然后通過比較距離與設定的閾值來判斷是否匹配。
根據你的具體需求,選擇適合的方法來實現(xiàn)字符串的模糊匹配。
拓展:C# list 中字段的模糊查找匹配實現(xiàn)
在游戲中,關于在列表中 查找某行數(shù)據時,需要通過關鍵字匹配,去遍歷表中的數(shù)據,如果表中匹配到關鍵字,則返回該行數(shù)據,沒有則返回null。比如查找在好友列表查找某個好友時。
建立一個 data 數(shù)據:用于保存item 的所有信息 (如: id,title,content,icon 等)
public class Data{ public int id; public string name; public string title; public string content; public string icon; ... }
實現(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; // 返回新的列表,符合模糊查詢的結果列表 }
用foreach 遍歷, 通過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(); 通過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; }
到此這篇關于C#實現(xiàn)字符串模糊匹配的方法小結的文章就介紹到這了,更多相關C#字符串模糊匹配內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
c# Invoke和BeginInvoke 區(qū)別分析
這篇文章主要介紹了c# Invoke和BeginInvoke 區(qū)別分析,需要的朋友可以參考下2014-10-10C# 使用WPF 用MediaElement控件實現(xiàn)視頻循環(huán)播放
在WPF里用MediaElement控件,實現(xiàn)一個循環(huán)播放單一視頻的程序,同時可以控制視頻的播放、暫停、停止。這篇文章給大家介紹了C# 使用WPF 用MediaElement控件實現(xiàn)視頻循環(huán)播放,需要的朋友參考下吧2018-04-04DirectoryEntry配置IIS7出現(xiàn)ADSI Error:未知錯誤(0x80005000)
這篇文章主要介紹了DirectoryEntry配置IIS7出現(xiàn)ADSI Error:未知錯誤(0x80005000)的解決辦法2015-09-09