C# 如何实现像驼峰一样的重竖琴匹配?
如何实现像驼峰一样的重竖琴匹配 我已经开始了: 注意:这张图片显示了用空格分隔的单词,但我编写的算法也可以在单词从小写转换为大写时(通过添加空格)对驼峰进行分割。它还可以用空格替换下划线 到目前为止,我使用了评级算法来确定匹配的顺序 但基本上我的只限于完全匹配、第一个字符匹配或子字符串匹配 我认为resharper还允许更有趣的事情,只是想知道是否有任何已知的有用算法用于这种匹配C# 如何实现像驼峰一样的重竖琴匹配?,c#,C#,如何实现像驼峰一样的重竖琴匹配 我已经开始了: 注意:这张图片显示了用空格分隔的单词,但我编写的算法也可以在单词从小写转换为大写时(通过添加空格)对驼峰进行分割。它还可以用空格替换下划线 到目前为止,我使用了评级算法来确定匹配的顺序 但基本上我的只限于完全匹配、第一个字符匹配或子字符串匹配 我认为resharper还允许更有趣的事情,只是想知道是否有任何已知的有用算法用于这种匹配 /// <summary> /// This returns how good of a
/// <summary>
/// This returns how good of a match something is using camelhumps.
/// 0 = not a match
/// 1 = exact match
/// 2 = exact match no whitespace
/// 3 = camel humps match on first character
/// 4 = substring
/// </summary>
/// <returns></returns>
private int GetMatchRanking( string value, string filter )
{
if ( filter.ToLower() == value.ToLower() ) return 1;
if ( filter.RemoveAllWhitespace().ToLower() == value.RemoveAllWhitespace().ToLower() ) return 2;
// Camel matching on first letters only: touch last changeset ==> tlc
if ( filter.ToLower() == GetFirstLettersForFiltering( value ) ) return 3;
if ( value.ToLower().Contains( filter.ToLower() ) ) return 4;
return 0;
}
// Define other methods and classes here
public List<string> CamelSplit( string s )
{
string text = Regex.Replace( s, @"([a-z])([A-Z])", "$1 $2" );
text = text.Replace( "_", " " ).Trim().ToLower();
return text.Split( " ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries ).ToList();
}
public string GetFirstLetters( List<string> strings )
{
return string.Join( "", strings.Select( s => s.Substring( 0, 1 ) ) );
}
public string GetFirstLettersForFiltering( string s )
{
string letters = GetFirstLetters( CamelSplit( s ) );
if( letters.Length <= 1 || letters.Contains( "<" ) ) return null;
return letters;
}
//
///这将返回某个对象使用驼峰的匹配程度。
///0=不匹配
///1=精确匹配
///2=完全匹配无空格
///3=第一个字符上的驼峰匹配
///4=子字符串
///
///
私有int GetMatchRanking(字符串值、字符串筛选器)
{
if(filter.ToLower()==value.ToLower())返回1;
if(filter.RemoveAllWhitespace().ToLower()==value.RemoveAllWhitespace().ToLower())返回2;
//仅首字母骆驼匹配:触摸最后更改集==>tlc
if(filter.ToLower()==GetFirstLettersForFiltering(value))返回3;
if(value.ToLower().Contains(filter.ToLower())返回4;
返回0;
}
//在此处定义其他方法和类
公共列表拆分(字符串s)
{
字符串text=Regex.Replace(s,@“([a-z])([a-z])”,“$1$2”);
text=text.Replace(““,”).Trim().ToLower();
返回text.Split(“.ToCharArray(),StringSplitOptions.RemoveEmptyEntries).ToList();
}
公共字符串GetFirstLetters(列表字符串)
{
返回string.Join(“,strings.Select(s=>s.Substring(0,1));
}
公共字符串GetFirstLettersForFiltering(字符串s)
{
字符串字母=GetFirstLetters(CamelSplit);
如果(letters.Length)我想你可以在你的项目中尝试lucene.net:我想你可以在你的项目中尝试lucene.net: