Beispiel #1
0
        public static RegExpParserResult SplitByRegExp(this RegExpParserResult prevParserResult,
                                                       SingleRegExpRule rule, IRegExpParserResultPublisher <RegExpRuleType, RegExpParserResultEventArgs> resultPublisher)
        {
            //check if regular expression type matches operation type
            if (rule.RuleType != RegExpRuleType.RegExpSplit)
            {
                throw new NotSupportedException(
                          String.Format("Method accepts regular expressions that are aimed to split text, but this has type {0}",
                                        rule.RuleType.ToString()));
            }

            //split blank text
            var entryArray = Regex.Split(prevParserResult.SourceText, rule.RegularExpression);

            //identify entries indexes
            var entryIndexDictionary = new List <KeyValuePair <int, string> >();

            foreach (var entry in entryArray)
            {
                int entryIndex = prevParserResult.SourceText.IndexOf(entry);
                entryIndexDictionary.Add(new KeyValuePair <int, string>(entryIndex, entry));
            }

            resultPublisher.RegExpParserResult = new RegExpParserResult(
                (prevParserResult.Entries != null && prevParserResult.Entries.Count() != 0) ?
                String.Join("\n", prevParserResult.Entries.Select(e => e.Value)) : prevParserResult.SourceText,
                entryIndexDictionary, rule.Title, prevParserResult);
            resultPublisher.Publish();
            return((RegExpParserResult)resultPublisher.RegExpParserResult);
        }
        public static RegExpParserResult FindByRegExp(this RegExpParserResult prevParserResult,
                                                      RegExpRule rule, IRegExpParserResultPublisher <RegExpRuleType, RegExpParserResultEventArgs> resultPublisher)
        {
            //check if regular expression type matches operation type
            if (rule.RuleType != RegExpRuleType.RegExpFind)
            {
                throw new NotSupportedException(
                          String.Format("Method accepts regular expressions that are aimed to filter text, but this has type {0}",
                                        rule.RuleType.ToString()));
            }

            //check if entires are not null as next calculations are based on it
            if (prevParserResult.Entries == null)
            {
                throw new ArgumentNullException("Something went wrong. Entries of previous action are null.");
            }

            //apply different filtration logic depending on type of rule
            IEnumerable <KeyValuePair <int, string> > entryIndexDictionary = new List <KeyValuePair <int, string> >();

            if (rule is SingleRegExpRule)
            {
                entryIndexDictionary = FindEntriesWithSingleRexExp(prevParserResult.Entries, (rule as SingleRegExpRule));
            }
            else if (rule is MultipleRegExpRules)
            {
                entryIndexDictionary = FindEntriesWithMultipleRegExp(prevParserResult.Entries, (rule as MultipleRegExpRules));
            }
            else
            {
                throw new NotSupportedException("Passed rule type is not supported in this method.");
            }

            resultPublisher.RegExpParserResult = new RegExpParserResult(
                (prevParserResult.Entries != null && prevParserResult.Entries.Count() != 0) ?
                String.Join("\n", prevParserResult.Entries.Select(e => e.Value)) : prevParserResult.SourceText,
                entryIndexDictionary, rule.Title, prevParserResult);
            resultPublisher.Publish();
            return((RegExpParserResult)resultPublisher.RegExpParserResult);
        }