如何比较两个字符串并忽略引号之间的单词?

时间:2015-07-29 13:10:06

标签: c# regex string compare

我有两个字符串如下:

string s1=@"hello my name is ""othden"" can I meet you";
string s2=@"hello my name is can I meet you";

我想在s1中找到s2,所以结果应该返回true(这意味着我在s2中找到s1)忽略"othden",因为它在引号内。如何在忽略字符串部分的同时进行此搜索?

2 个答案:

答案 0 :(得分:3)

您可以替换这些情况的所有出现,并创建一个全新的规范化字符串(只是为了保留原始字符串)。

然后,你只需要使用规范化的字符串进行任何你想要进行的比较。

string s1 = @"hello my name is ""othden"" can I meet you";
string s2 = "hello my name is can I meet you";
string normalized_s1 = Regex.Replace(s1, "\"[^\"]*\"", String.Empty);
bool areEquals = (s2 == normalized_s1);

正则表达式\"[^\"]*\"表示以下内容:

  1. \"字面匹配字符"
  2. [^\"]匹配任何不是"

    的字符

    2.A。 无限次之间的*

  3. \"字面匹配字符"

答案 1 :(得分:-1)

有点不清楚你想要什么,但是这样的事情应该这样做。

        string s1=@"hello my name is ""othden"" can I meet you";
        string s2=@"hello my name is can I meet you";

        string temp = s1.Replace(" \"othden\"", String.Empty);

        bool b = s2.Contains(temp);

你不一定只是"忽略"字符串的一部分,而不是你需要创建一个新的,临时的'不包含您知道的值的字符串并不重要。

如果您想在引号之间忽略任何,那么您需要这样的内容:

        string s1=@"hello my name is ""othden"" can I meet you";
        string s2=@"hello my name is can I meet you";

        int fqi = s1.IndexOf('"');
        int lqi = s1.LastIndexOf('"');

        string temp = s1.Remove(fqi, (lqi - fqi));
        temp = temp.Replace("\" ", String.Empty);

        bool b = s2.Contains(temp);