c#在列表中搜索同一行中的两个字符串

时间:2011-11-28 17:03:08

标签: c# list search

我有一个名为simple的列表,其所有对象都在下面的表格中:

Tag:  textbook - sacred texts   Rec Id: 10011095 
Tag:  advocacy  Rec Id: 10037815 
Tag:  advocacy  Rec Id: 10043396 
Tag:  advocacy  Rec Id: 10037795 
Tag:  advocacy  Rec Id: 10031437 
Tag:  advocacy  Rec Id: 10035721 
Tag:  advocacy  Rec Id: 10024853

我有一个名为fullList的第二个列表,其中包含以下对象:

10055853    What's the Matter with the Internet? by Mark Poster      academic    1       0,083

10055853    What's the Matter with the Internet? by Mark Poster      computers       1       0,083

10055853    What's the Matter with the Internet? by Mark Poster      internet    2       0,167

我分割simpe列表的每一行以获得两个字符串。 第一个在“Tag:”之后和“Rec Id:”之前有单词,第二个在Rec id之后有数字。

Example: tagGB  = textbook - sacred texts
rec_idGB = 10011095

然后我想搜索列表fullList中的任何行(对象)是否包含两个字符串的BOTH(在同一行中)。

我试过了:

 foreach (String line in nonZeroList)
        {

            foreach (String line2 in Gblist)
            {

            rec_idGB = line.Split('\t')[0].Substring(4).Trim();
            tagGB = line.Split('\t')[2].Substring(7).Trim();

            if (line.Contains(rec_idGB) == false && line.Contains(tagGB) == false)
            {

            }


        }
    }

但是我得到了许多不包含该字符串的行。 我想在resList的同一行中仅将rec_idGB和tagGB作为一个resutl。有什么建议吗?

3 个答案:

答案 0 :(得分:1)

  

我想在recList的同一行中仅将rec_idGB和tagGB作为一个resutl。

所以你想要simpleList中的所有行都不能与fullList中的任何行匹配? (或者你想要fullList中的每一行获取simpleList中不匹配的所有行?我猜测不是。)

foreach (string line in simpleList)
{
    string rec_idGB = line.Split('\t')[0].Substring(4).Trim();
    string tagGB = line.Split('\t')[2].Substring(7).Trim();
    bool thereIsAMatch = false;
    foreach (string line2 in fullList)
    {
        if (line2.Contains(rec_idGB) && line2.Contains(tagGB))
        {
            thereIsAMatch = true;
            break;
        }
    }
    if(!thereIsAMatch)
    {
        // This is what you want?
    }
}

答案 1 :(得分:0)

尝试我的线程: filtering values from string after/before certain word in c#

解决方案是使用正则表达式

不完全相同的问题,但我认为你会像我一样轻松找到解决方案

答案 2 :(得分:0)

您不应该与line2而不是line进行比较吗?您从line解析,然后检查它是否包含在您刚解析出的line中。

例如:

 if (line2.Contains(rec_idGB) == false && line2.Contains(tagGB) == false)

或者它可能是另一种方式......你想从line2解析并与line进行比较,但不是很确定。