通过忽略某些字符来比较两个字符串

Mys*_*tic 3 c# string

我想知道是否有一种简单的方法可以通过排除字符串中的某些字符来检查两个字符串是否匹配.见下面的例子.

我可以通过编写正则表达式来查找"通配符"字符,并用常用字符替换它们,从而轻松编写这样的方法.然后比较两个字符串str1和str2.我不是在寻找这样的实现,而是想知道是否有任何.Net框架类可以解决这个问题.似乎是一种常见的需求,但我找不到任何这样的方法.

例如:

string str1 = "ABC-EFG";    
string str2 = "ABC*EFG";
Run Code Online (Sandbox Code Playgroud)

必须声明两个字符串相等.

谢谢!

Joh*_*ais 8

我发现自己有相同的要求,我使用的解决方案基于String.Compare方法:

String.Compare(str1, str2, CultureInfo.InvariantCulture, CompareOptions.IgnoreSymbols)
Run Code Online (Sandbox Code Playgroud)


ber*_*nie 5

不确定这是否有帮助:

\n\n

Damerau-Levenshtein 距离是处理模糊字符串搜索的几种算法之一。

\n\n

“ABC-EFG”和“ABC*EFG”之间的 DLD 为 1\xe2\x80\x94“将一个字符串转换为另一个字符串所需的最少操作数,其中操作定义为插入、删除或替换单个字符或两个字符的转置。”

\n\n

当然,对于两个字符串“ZBC-EFG”和“ABC-EFG”\xe2\x80\x94,该算法也会返回 1,这可能不是您正在寻找的。

\n\n

DLD 的 Python 实现,来自http://paxe.googlecode.com/svn/trunk/paxe/Lib/Installer.py

\n\n
def dist(s1, s2):\n    d = {}\n    lenstr1 = len(s1)\n    lenstr2 = len(s2)\n    for i in xrange(-1,lenstr1+1):\n        d[(i,-1)] = i+1\n    for j in xrange(-1,lenstr2+1):\n        d[(-1,j)] = j+1\n\n    for i in xrange(0,lenstr1):\n        for j in xrange(0,lenstr2):\n            if s1[i] == s2[j]:\n                cost = 0\n            else:\n                cost = 1\n            d[(i,j)] = min(\n                d[(i-1,j)] + 1, # deletion\n                d[(i,j-1)] + 1, # insertion\n                d[(i-1,j-1)] + cost, # substitution\n                )\n            if i>1 and j>1 and s1[i]==s2[j-1] and s1[i-1] == s2[j]:\n                d[(i,j)] = min (d[(i,j)], d[i-2,j-2] + cost) # transposition\n\n    return d[lenstr1-1,lenstr2-1]\n
Run Code Online (Sandbox Code Playgroud)\n