我正在寻找一种方法来检查使用C#在文本文件中是否存在“foo”字。
我可能会使用正则表达式,但如果单词分成两行,我不确定它是否会起作用。我的流程读取器在行上进行了枚举,我遇到了同样的问题。
有任何意见吗?
答案 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);
}