Мне нужно использовать регулярное выражение, чтобы сохранить последние 4 символа строки. Я не знаю длину строки, поэтому мне нужно начинать в конце и рассчитывать назад. Программа написана на С#.
Ниже приведены две строки:
-
840057
-
1002945
Мне нужен результат (последние 4 символа):
-
0057
-
2945
Моя исходная строка кода использовала Regex.Replace, но я не мог найти регулярное выражение для работы, как вы можете видеть в комментариях ниже.
replacementVal = Regex.Replace(replacementVal, wildcard.Regex, wildcard.RegexReplaceBy);
Я переключил свой код на использование Regex.Match, а затем регулярное выражение (?s)[0-9]{4}$
отлично работало (см. Ниже):
replacementVal = Regex.Replace(replacementVal, wildcard.Regex, wildcard.RegexReplaceBy);
Однако использование Regex.Match ломает другие регулярные выражения, которые я использую, например, я использую ^(.).*
Для получения первой буквы имени. Это работает при использовании Regex.Replace, но сбой при использовании Regex.Match.
Мой код ниже, обратите внимание на исходную строку, содержащую Regex.Replace, закомментирован.
Почему Regex.Match работает с одним выражением, а Regex.Replace работает с другим?
/// Replaces a wildcard in a string
/// </summary>
/// <param name="str">The string for which to replace the wildcards</param>
/// <param name="row">The DataRow in which the string exists</param>
/// <param name="wildcard">The wildcard to replace</param>
/// <returns>The string with the wildcard replaced</returns>
private static string ReplaceWildcardInString(string str, DataRow row, Wildcard wildcard)
{
// If the string is null or empty, return it as is
if (string.IsNullOrEmpty(str))
return str;
// This will hold the replacement value
var replacementVal = string.Empty;
// If the replacement column value is not empty
if (!row.IsDBNullOrNull(wildcard.ReplaceByColumnName))
{
// Convert its value to string
replacementVal = row[wildcard.ReplaceByColumnName].ToString();
// Apply wildcard regex if given
if (!string.IsNullOrEmpty(wildcard.Regex) && wildcard.RegexReplaceBy != null)
//replacementVal = Regex.Replace(replacementVal, wildcard.Regex, wildcard.RegexReplaceBy);
replacementVal = Regex.Match(replacementVal, wildcard.Regex).Value;
}
// Replace all wildcards with the replacement value (case insensitive)
var wildcardPattern = Regex.Escape(string.Format("%{0}%", wildcard.Name));
str = Regex.Replace(str, wildcardPattern, replacementVal, RegexOptions.Singleline | RegexOptions.IgnoreCase);
// Return the new string
return str;
}
Многие благодарят, я ценю помощь.