我使用此代码来检查我加载到内存中的文本文件中是否存在字符串
foreach (Match m in Regex.Matches(haystack, needle))
richTextBox1.Text += "\nFound @ " + m.Index;
Run Code Online (Sandbox Code Playgroud)
正则表达式返回匹配发生的位置,但我想知道行号?
您可以先将文本拆分为行,然后将RegEx应用于每一行 - 当然,如果needle
包含NewLine,则无效:
var lines = haystack.Split(new[] { Environment.NewLine }, StringSplitOptions.None);
for(int i=0; i <lines.Length; i++)
{
foreach (Match m in Regex.Matches(lines[i], needle))
richTextBox1.Text += string.Format("\nFound @ line {0}", i+1)
}
Run Code Online (Sandbox Code Playgroud)
最好的解决方案是调用仅在匹配发生时获取行号的方法.这样,如果检查了多个文件并且regexp with \n
将起作用,则性能不会受到太大影响.在stackoverflow上的某处发现了这个方法:
public int LineFromPos(string input, int indexPosition)
{
int lineNumber = 1;
for (int i = 0; i < indexPosition; i++)
{
if (input[i] == '\n') lineNumber++;
}
return lineNumber;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6694 次 |
最近记录: |