繁体   English   中英

"C# \/ RegEx - 如何改进我的 RegEx 表达式?"

[英]C# / RegEx - How can I improve my RegEx expression?

我对我的 RegEx 代码有疑问。 我的情况是,我有大约 700 个文本文件,我在我的工具中导入这些文件,有时需要不到一秒钟,有时甚至需要 7 秒钟。

所以我分析了我的工具,它说File.ReadAllLines<\/code>和我的 RegEx 花费的时间最多。所以也许一些 RegEx 专业人士可以帮助我并教我如何改进我的 RegEx 表达。

这是我的代码:

var entries = new List<SomeModelObject>();

            try
            {
                var allLines = File.ReadAllLines(filepath, Encoding.Default);

                var isHashCollected = false;
                // main pattern
                var pattern = @"[a-zA-Z<>:_]+\s+SYMBOL:\s(?<var>\w+)(|\s+)=\s(?<value>\W\w+|\w+)\s;\s\/\/(?<comment>.*)";
                Match match;
                Regex regex = new Regex(pattern,
                      RegexOptions.Singleline);

                var secondPattern = @"<0:64:0>[\w\s;]+\/\/\s(?<second>\w+)";
                Regex regexSecondPattern  = new Regex(secondPattern , RegexOptions.Singleline);

                var thirdPattern = @"<@\(#\)(?<third>\w+)";
                Regex regexThirdPattern  = new Regex(thirdPattern , RegexOptions.Singleline);
                

                foreach (var line in allLines)
                {
                    if (!isHashCollected)
                    {
                        isHashCollected = GetHash(regexThirdPattern.Match(line), isHashCollected);
                    }

                    match = regex.Match(line);

                    if (match.Success)
                    {
                        // get entries
                        var someModelObject= new SomeModelObject();
                        someModelObject.projCase = match.Groups["var"].Value;
                        someModelObject.projValue = match.Groups["value"].Value;
                        someModelObject.projComment = match.Groups["comment"].Value;
                        entries.Add(someModelObject);
                        continue;
                    }

                    GetSecondHash(regexSecondPattern.Match(line));

                }

                return entries;
            }
            catch (Exception e)
            {
                return new List<SomeModelObject>();
            }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM