/// <summary> /// Rename the specified input, using the relativeCount. /// </summary> /// <param name="input">Input String to rename.</param> /// <param name="relativeCount">Relative count. This can be used for enumeration.</param> /// <returns>A new string renamed according to the rename operation's rules.</returns> public RenameResult Rename(string input, int relativeCount) { if (string.IsNullOrEmpty(input)) { return(new RenameResult()); } RenameResult renameResult; if (string.IsNullOrEmpty(this.SearchString)) { renameResult = new RenameResult(); renameResult.Add(new Diff(input, DiffOperation.Equal)); return(renameResult); } MatchCollection matches; try { // Regex gives us case sensitivity, even when not searching with regex. var regexOptions = this.SearchIsCaseSensitive ? default(RegexOptions) : RegexOptions.IgnoreCase; matches = Regex.Matches(input, this.SearchStringAsRegex, regexOptions); } catch (System.ArgumentException) { renameResult = new RenameResult(); renameResult.Add(new Diff(input, DiffOperation.Equal)); return(renameResult); } renameResult = RenameResultUtilities.CreateDiffFromReplacedMatches(input, this.ReplaceMatch, matches); return(renameResult); }
/// <summary> /// Rename the specified input, using the relativeCount. /// </summary> /// <param name="input">Input String to rename.</param> /// <param name="relativeCount">Relative count. This can be used for enumeration.</param> /// <returns>A new string renamed according to the rename operation's rules.</returns> public RenameResult Rename(string input, int relativeCount) { if (string.IsNullOrEmpty(input)) { return(RenameResult.Empty); } var parseNumbersRegex = "([0-9]+)"; var regex = new Regex(parseNumbersRegex); var matches = regex.Matches(input); var fullReplacementResult = RenameResultUtilities.CreateDiffFromReplacedMatches(input, this.ReplaceMatch, matches); var renameResult = RenameResultUtilities.GetDiffResultFromStrings(input, fullReplacementResult.Result); return(renameResult); }
/// <summary> /// Rename the specified input, using the relativeCount. /// </summary> /// <param name="input">Input String to rename.</param> /// <param name="relativeCount">Relative count. This can be used for enumeration.</param> /// <returns>A new string renamed according to the rename operation's rules.</returns> public RenameResult Rename(string input, int relativeCount) { if (string.IsNullOrEmpty(input)) { return(RenameResult.Empty); } var inputCaseChanged = string.Empty; if (!string.IsNullOrEmpty(this.DelimiterCharacters)) { // We use regex instead of string.Split simply because the results can include the delimiters using capture groups var delimiterCharArray = this.DelimiterCharacters.ToCharArray(); var patternBuilder = new System.Text.StringBuilder(); patternBuilder.Append("(["); foreach (var delimiterChar in delimiterCharArray) { // Dashes don't get escaped but are treated as a special character... need to escape them manually if (delimiterChar == '-') { patternBuilder.Append("\\-"); } else { patternBuilder.Append(Regex.Escape(delimiterChar.ToString())); } } patternBuilder.Append("])"); string pattern = patternBuilder.ToString(); string[] words = Regex.Split(input, pattern); var changedStringBuilder = new System.Text.StringBuilder(); foreach (var word in words) { if (!string.IsNullOrEmpty(word)) { // Do not capitalize the delimiter characters if (word.Length == 1 && this.DelimiterCharacters.Contains(word)) { changedStringBuilder.Append(word); } else { var isFirstWord = word == words[0]; var useLowerCasing = isFirstWord && this.UseCamel; changedStringBuilder.Append(this.UpperOrLowerFirstChar(word, useLowerCasing)); } } } inputCaseChanged = changedStringBuilder.ToString(); } else { inputCaseChanged = input; } var renameResult = RenameResultUtilities.GetDiffResultFromStrings(input, inputCaseChanged); return(renameResult); }