C#查找文档中是否有单词

时间:2010-01-21 15:33:09

标签: c# regex

我正在寻找一种方法来检查使用C#在文本文件中是否存在“foo”字。

我可能会使用正则表达式,但如果单词分成两行,我不确定它是否会起作用。我的流程读取器在行上进行了枚举,我遇到了同样的问题。

有任何意见吗?

6 个答案:

答案 0 :(得分:3)

简单搜索出了什么问题?

如果文件不大,并且内存不是问题,只需将整个文件读入字符串(ReadToEnd()方法),然后使用字符串Contains()

答案 1 :(得分:2)

以下是使用LINQ

的快速示例
    static void Main(string[] args)
    {
        { //LINQ version
            bool hasFoo = "file.txt".AsLines()
                                    .Any(l => l.Contains("foo"));
        }
        { // No LINQ or Extension Methods needed
            bool hasFoo = false;
            foreach (var line in Tools.AsLines("file.txt"))
                if (line.Contains("foo"))
                {
                    hasFoo = true;
                    break;
                }
        }
    }
}
public static class Tools
{
    public static IEnumerable<string> AsLines(this string filename)
    {
        using (var reader = new StreamReader(filename))
            while (!reader.EndOfStream)
            {
                var line = reader.ReadLine();
                while (line.EndsWith("-") && !reader.EndOfStream)
                    line = line.Substring(0, line.Length - 1)
                                + reader.ReadLine();
                yield return line;
            }
    }
}

答案 2 :(得分:2)

你去吧。因此,当我们读取文件时,我们会查看字符串,并跟踪第一个单词的最后一个单词组合,并检查是否符合您的模式。

string pattern = "foo";
string input = null;
string lastword = string.Empty;
string firstword = string.Empty;
bool result = false;

FileStream FS = new FileStream("File name and path", FileMode.Open, FileAccess.Read, FileShare.Read);
StreamReader SR = new StreamReader(FS);

while ((input = SR.ReadLine()) != null) 
{
    firstword = input.Substring(0, input.IndexOf(" "));
    if(lastword.Trim() != string.Empty) { firstword = lastword.Trim() + firstword.Trim(); } 

    Regex RegPattern = new Regex(pattern);
    Match Match1 = RegPattern.Match(input);
    string value1 = Match1.ToString(); 

    if (pattern.Trim() == firstword.Trim() || value1 != string.Empty) { result = true;  }

    lastword = input.Trim().Substring(input.Trim().LastIndexOf(" "));
}

答案 3 :(得分:1)

如果该线包含足球怎么样?还是傻瓜?如果您要沿正则表达式路线前进,则需要查找单词边界。

Regex r = new Regex("\bfoo\b");

如果需要,还要确保您考虑不区分大小写。

答案 4 :(得分:0)

在这种情况下,您不需要正则表达式。只需循环遍历这些行并检查它是否包含foo

using (StreamReader sr = File.Open("filename", FileMode.Open, FileAccess.Read))
{
    string line = null;
    while (!sr.EndOfStream) {
        line = sr.ReadLine();
        if (line.Contains("foo"))
        {
            // foo was found in the file
        }
    }
}

答案 5 :(得分:0)

你可以构造一个正则表达式,允许在每个字符之间放置换行符。

private static bool IsSubstring(string input, string substring)
{
    string[] letters = new string[substring.Length];
    for (int i = 0; i < substring.Length; i += 1)
    {
        letters[i] = substring[i].ToString();
    }
    string regex = @"\b" + string.Join(@"(\r?\n?)", letters) + @"\b";
    return Regex.IsMatch(input, regex, RegexOptions.ExplicitCapture);
}