首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在文件中查找包含特定单词的行,例如assert,Assert,ASSERTION,而不是组合词,例如assertCount assert_Count

在文件中查找包含特定单词的行,例如assert,Assert,ASSERTION,而不是组合词,例如assertCount assert_Count
EN

Stack Overflow用户
提问于 2019-06-20 20:30:10
回答 1查看 47关注 0票数 -1

我想复制包含某些关键字的行,例如assert或assertion,但如果该行包含与另一个关键字组合的关键字,例如assertCount,则忽略该行

我可以复制带有这些关键字的行,但不知道如何忽略关键字与另一个单词的组合

代码语言:javascript
复制
StreamReader reader = new StreamReader(stringFile);
                string line = null;
                //reading all text in a file
                while (!reader.EndOfStream)
                {

                    line = reader.ReadLine();
                    if (!String.IsNullOrEmpty(line)) totalLines++;
                    if (line.IndexOf("assert", StringComparison.CurrentCultureIgnoreCase) >= 0)
                    {
                        linesWithAssertions++;
                        fileObj.LogFileWriter(line);

                    }

                    else if (line.IndexOf("ASSERTION", StringComparison.CurrentCultureIgnoreCase) >= 0)
                    {
                        linesWithAssertions++;
                        fileObj.LogFileWriter(line);
                    }

                }

我对两个关键字使用了两个单独的函数。有没有办法只用一个函数就能做到这一点。如果关键字与另一个单词组合在一起,如assertCount,如何忽略行

EN

回答 1

Stack Overflow用户

发布于 2019-06-21 03:27:33

你可以使用正则表达式。

代码语言:javascript
复制
if (Regex.IsMatch(line, @"\bassert(ion)?\b", RegexOptions.IgnoreCase))
{
    linesWithAssertions++;
}

bool match;
match = Regex.IsMatch("lorem assert ipsum", @"\bassert(ion)?\b");      // true
match = Regex.IsMatch("lorem assertion ipsum", @"\bassert(ion)?\b");   // true
match = Regex.IsMatch("lorem assert", @"\bassert(ion)?\b");            // true
match = Regex.IsMatch("assert lorem", @"\bassert(ion)?\b");            // true
match = Regex.IsMatch("assert", @"\bassert(ion)?\b");                  // true
match = Regex.IsMatch("lorem assertCount ipsum", @"\bassert(ion)?\b"); // false
match = Regex.IsMatch("loremassert", @"\bassert(ion)?\b");             // false
match = Regex.IsMatch("assertlorem", @"\bassert(ion)?\b");             // false

如果你有更多的关键字,你可以使用这个正则表达式:

代码语言:javascript
复制
Match m = Regex.Match(line, @"\b(assert(ion)?|keyword2|keyword3)\b", RegexOptions.IgnoreCase);
if (m.Success)
{
    string keyword = m.Groups[1].Value;
    if (keyword.StartsWith("assert", StringComparison.CurrentCultureIgnoreCase))
    {
        linesWithAssertions++;
    }
    else if (keyword.Equals("keyword2", StringComparison.CurrentCultureIgnoreCase))
    {
        linesWithKeyword2++;
    }
    else if (keyword.Equals("keyword3", StringComparison.CurrentCultureIgnoreCase))
    {
        linesWithKeyword3++;
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56686046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档