我想复制包含某些关键字的行,例如assert或assertion,但如果该行包含与另一个关键字组合的关键字,例如assertCount,则忽略该行
我可以复制带有这些关键字的行,但不知道如何忽略关键字与另一个单词的组合
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,如何忽略行
发布于 2019-06-21 03:27:33
你可以使用正则表达式。
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
如果你有更多的关键字,你可以使用这个正则表达式:
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++;
}
}
https://stackoverflow.com/questions/56686046
复制相似问题