0

次のように、ログ ファイルで使用可能な次の行から特定の (bug.updateBug) 文字列をフェッチする正規表現を作成する方法: WX Edit Bug: 3550704 Server: servername User:testuser appGUID: appguidvalue Elapsed Time: 624ms method:bug.updateBug Date : 2013 年 5 月 1 日水曜日 09:38:01 PDT

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Text.RegularExpressions;

namespace ConsoleApplication59
{
    class Program
    {
        static void Main(string[] args)
        {
            IEnumerable<string> textLines
                           = Directory.GetFiles(@"C:\testlocation\", "*.*")
                             .Select(filePath => File.ReadLines(filePath))
                             .SelectMany(line => line);

            List<string> users = new List<string>();
            Regex r = new Regex("^.*WX\\sADVSearch(.*)50\\]$");
            foreach (string Line in textLines)
            {
                if (r.IsMatch(Line))
                {
                    users.Add(Line);
                }
            }
            string[] textLines1 = new List<string>(users).ToArray();
            int countlines = textLines1.Count();
            Console.WriteLine("WX_ADVSearch=" + countlines);
            // keep screen from going away
            // when run from VS.NET
            Console.ReadLine();
        }
    }
}
4

1 に答える 1

0

キーと値のペアのような形でデータを持っているようです。この正規表現を使用してみてください:

(?<=method\:)([^ ]+)

ここ:

メソッドは、値が検索されるキーです。そして、次のキーを除くすべてのものは、その値であると想定されています。

それが役に立てば幸い!

編集

        static void Main(string[] args)
        {
            IEnumerable<string> textLines = Directory.GetFiles(@"C:\testlocation\", "*.*")
                             .Select(filePath => File.ReadLines(filePath))
                             .SelectMany(line => line);

            //List<string> users = new List<string>();
            //Regex r = new Regex("^.*WX\\sADVSearch(.*)50\\]$");
            string text = String.Join("",textLines.ToArray());

            MatchCollection mcol = Regex.Matches(text,"(?<=method\:)([^ ]+)");
            //foreach (string Line in textLines)
            //{
            //    if (r.IsMatch(Line))
            //    {
            //        users.Add(Line);
            //    }
            //}
            //string[] textLines1 = new List<string>(users).ToArray();
            int countlines = mcol.Count; //textLines1.Count();
            Console.WriteLine("WX_ADVSearch=" + countlines);
            // keep screen from going away
            // when run from VS.NET
            Console.ReadLine();
        }
于 2013-05-09T05:01:47.987 に答える