Как получить путь к файлу с совпавшим регулярным выражением? - PullRequest
2 голосов
/ 25 мая 2019

Я успешно выполнил регулярное сопоставление нескольких строк из папки с 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

Ответы [ 2 ]

1 голос
/ 25 мая 2019

Поскольку у вас уже есть DirectoryInfo, вы можете получить свойство FullName .

У вас также есть имя файла files.Чтобы получить имя и местоположение файла, вы можете использовать Path.Combine

Ваш обновленный код может выглядеть следующим образом:

Console.WriteLine(count + "\t" + Path.Combine(di.FullName , Path.GetFileName(files)) + "\t" + match.Value + "\n");
0 голосов
/ 25 мая 2019

Я предполагаю, что мы могли бы просто захотеть сопоставить некоторые .txt файлы.Если это так, давайте начнем с простого выражения, которое собирает все от начала наших входных строк до .txt, затем мы добавляем .txt в качестве правой границы:

^(.+?)(.txt)$

Демо

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);
        }
    }
}
...