如何获取正则表达式匹配字符串的文件路径?
How to obtain regex matched string 's file path?
我已经成功地用 txt.files 和 "streamreader" 正则表达式匹配了文件夹中的多个字符串,但我还需要获取匹配字符串的文件路径。
如何获取匹配字符串的文件路径?
static void abnormalitiescheck()
{
int count = 0;
Regex regex = new Regex(@"(@@@@@)");
DirectoryInfo di = new DirectoryInfo(txtpath);
Console.WriteLine("No" + "\t" + "Name and location of file" + "\t" + "||" +" " + "Abnormal Text Detected");
Console.WriteLine("=" + "\t" + "=========================" + "\t" + "||" + " " + "=======================");
foreach (string files in Directory.GetFiles(txtpath, "*.txt"))
{
using (StreamReader reader = new StreamReader(files))
{
string line;
while ((line = reader.ReadLine()) != null)
{
Match match = regex.Match(line);
if (match.Success)
{
count++;
Console.WriteLine(count + "\t\t\t\t\t" + match.Value + "\n");
}
}
}
}
}
如果可能的话,我也想输出字符串的文件路径。
例如,
C:/..../email_4.txt
C:/..../email_7.txt
C:/..../email_8.txt
C:/..../email_9.txt
我猜我们可能只想匹配一些 .txt
文件。如果可能是这种情况,让我们从一个简单的表达式开始,它将收集从输入字符串开始到 .txt
的所有内容,然后我们添加 .txt
作为右边界:
^(.+?)(.txt)$
Demo
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"^(.+?)(.txt)$";
string input = @"C:/..../email_4.txt
C:/..../email_7.txt
C:/..../email_8.txt
C:/..../email_9.txt";
RegexOptions options = RegexOptions.Multiline;
foreach (Match m in Regex.Matches(input, pattern, options))
{
Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index);
}
}
}
因为您已经有了 DirectoryInfo
,您可以获得 FullName 属性。
您还有名为 files
的文件名。要获取文件的名称和位置,您可以使用 Path.Combine
您更新后的代码可能如下所示:
Console.WriteLine(count + "\t" + Path.Combine(di.FullName , Path.GetFileName(files)) + "\t" + match.Value + "\n");
我已经成功地用 txt.files 和 "streamreader" 正则表达式匹配了文件夹中的多个字符串,但我还需要获取匹配字符串的文件路径。 如何获取匹配字符串的文件路径?
static void abnormalitiescheck()
{
int count = 0;
Regex regex = new Regex(@"(@@@@@)");
DirectoryInfo di = new DirectoryInfo(txtpath);
Console.WriteLine("No" + "\t" + "Name and location of file" + "\t" + "||" +" " + "Abnormal Text Detected");
Console.WriteLine("=" + "\t" + "=========================" + "\t" + "||" + " " + "=======================");
foreach (string files in Directory.GetFiles(txtpath, "*.txt"))
{
using (StreamReader reader = new StreamReader(files))
{
string line;
while ((line = reader.ReadLine()) != null)
{
Match match = regex.Match(line);
if (match.Success)
{
count++;
Console.WriteLine(count + "\t\t\t\t\t" + match.Value + "\n");
}
}
}
}
}
如果可能的话,我也想输出字符串的文件路径。 例如,
C:/..../email_4.txt
C:/..../email_7.txt
C:/..../email_8.txt
C:/..../email_9.txt
我猜我们可能只想匹配一些 .txt
文件。如果可能是这种情况,让我们从一个简单的表达式开始,它将收集从输入字符串开始到 .txt
的所有内容,然后我们添加 .txt
作为右边界:
^(.+?)(.txt)$
Demo
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"^(.+?)(.txt)$";
string input = @"C:/..../email_4.txt
C:/..../email_7.txt
C:/..../email_8.txt
C:/..../email_9.txt";
RegexOptions options = RegexOptions.Multiline;
foreach (Match m in Regex.Matches(input, pattern, options))
{
Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index);
}
}
}
因为您已经有了 DirectoryInfo
,您可以获得 FullName 属性。
您还有名为 files
的文件名。要获取文件的名称和位置,您可以使用 Path.Combine
您更新后的代码可能如下所示:
Console.WriteLine(count + "\t" + Path.Combine(di.FullName , Path.GetFileName(files)) + "\t" + match.Value + "\n");