c# - 规范化两个字符串然后比较

标签 c# string compare normalization

我有 2 个字符串,它们都是某种引用号(有前缀和数字)。

string a = "R&D123";
string b = "R&D 123";

string astring b 是两个不同的用户输入,我正在尝试比较这两个字符串是否匹配。

我知道我可以使用 String.Compare() 来检查两个字符串是否相同,但就像上面的示例一样,它们可能是不同的字符串,但在技术上是相同的。

因为它们都是用户输入(来自不同的用户),所以可以有几种不同的格式。

"R&D123"
"R&D 123" //with space in between
"R.D.123 " //using period or other character
"r&d123" //different case
"RD123" //no special character
...etc

有没有一种方法可以先以某种方式“规范化”两个字符串,然后再比较它们?

我知道一个简单易懂的方法是使用 string.Replace() 将特殊字符和空格替换为空格并使用 string.ToLower() 所以我不用担心案件。但此方法的问题是,如果我有很多特殊字符,我将执行 .Replace() 很多次,这并不理想。

另一个问题是 R&D 不是我需要担心的唯一前缀,还有其他前缀,例如 A.P.K-D 等. 不确定这是否会有所作为:/

感谢任何帮助,谢谢!

最佳答案

如果你只想输入字母和数字,你可以用 linq 来完成:

var array1 = a.Where(x =>char.IsLetterOrDigit(x)).ToArray();
var array2 = b.Where(x => char.IsLetterOrDigit(x)).ToArray();
var normalizedStr1 = new String(array1).ToLower();
var normalizedStr2 = new String(array2).ToLower();

String.Compare(normalizedStr1,normalizedStr2);

关于c# - 规范化两个字符串然后比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21028472/

相关文章:

C#:我希望单词的每个字母都以新行开头

java - 我可以将字符串文件从 res/values/string.xml 放置到远程主机服务器并从那里读取吗

java - string.replaceAll() 是如何工作的?

java - 访问堆栈顶部元素以递归比较两个堆栈元素是否相同的方法

php - 在 PHP 中比较数组 - 有趣的行为

java - 如何将数组列表中的给定键与 HashMap 键进行比较?

c# - 如何在 C# 中检测 DLL 的进程退出

c# - 需要用C#写的RPC调用例子

c# - Linq UNION 查询选择两个元素

string - awk 字符串替换