Прописная замена регулярного выражения в C#

В остальной части у вас есть только 1 условие:

sample_storage != 'discarded'

, поэтому его нельзя «игнорировать» .
Но в части if у вас есть что-то вроде этого:

A and B or C or D or E...

Если один из C или D или E ... равен true, то результат равен true, и вы думаете [1114 ] что A «игнорируется» .
Так что используйте скобки вокруг каждой части, которая соответствует вашим потребностям.
может быть что-то вроде этого:

A and (B or C or D or E...)
5
задан abatishchev 10 December 2011 в 19:16
поделиться

6 ответов

Хорошо, 2 решения, одно встроенное:

input = Regex.Replace(input, @"(EQUIP:)(\S+)", m => string.Format(@"<a title=""View equipment item {1}"" href=""/EquipmentDisplay.asp?eqnum={2}"">{0}{1}</a>", m.Groups[1].Value, m.Groups[2].Value, m.Groups[2].Value.ToUpper()), RegexOptions.IgnoreCase);

Другое использование отдельной функции:

var input = Regex.Replace(input, @"(EQUIP:)(\S+)", Evaluator, RegexOptions.IgnoreCase);

private static string Evaluator(Match match)
{
    return string.Format(@"<a title=""View equipment item {1}"" href=""/EquipmentDisplay.asp?eqnum={2}"">{0}{1}</a>", match.Groups[1].Value, match.Groups[2].Value, match.Groups[2].Value.ToUpper());
}
12
ответ дан 18 December 2019 в 09:54
поделиться

Использование Regex. Замените непосредственно, я не думаю, что существует путь. Но Вы могли сделать это двумя процессами шага и получить результат, который Вы ищете.

var match = Regex.Match(input, @"(EQUIP:)(\S+)", RegexOptions.IgnoreCase);
var input = String.Format( @"&lt;a title=""View equipment item {1}"" href=""/EquipmentDisplay.asp?eqnum={2}""&gt;{0}{1}&lt;/a&gt;", 
match.Groups[1].Value,
match.Groups[2].Value,
match.Groups[2].Value.ToUpper());
3
ответ дан 18 December 2019 в 09:54
поделиться

Можно использовать делегата MatchEvaluator вместо строки в замене. Можно затем встроить делегата как анонимную функцию если на недавней.NET. 'Старое' решение могло бы быть похожим на что-то вроде этого:

 static void Main(string[] args)
 {
     string input = "EQUIP:12312dd23";
     string output = Regex.Replace(input, @"(EQUIP:)(\S+)", 
         new MatchEvaluator(genURL), RegexOptions.IgnoreCase);
     Console.WriteLine(output);
     Console.ReadKey();
 }
 static string genURL(Match m)
 {
     return string.Format(@"<a title=""View item {0}"" 
            href=""/EqDisp.asp?eq={2}"">{1}{0}</a>",
            m.Groups[2].Value,m.Groups[1].Value,m.Groups[2].Value.ToUpper());
 }
2
ответ дан 18 December 2019 в 09:54
поделиться

Принятие, которые вводят, является строкой:

input = Regex.Replace(input.ToUpper, @"(EQUIP:)(\S+)", @"<a title=""View equipment item $2"" href=""/EquipmentDisplay.asp?eqnum=$2"">$1$2</a>", RegexOptions.IgnoreCase);

Изменение случая строки не является чем-то, что regex делает.

0
ответ дан 18 December 2019 в 09:54
поделиться
string input = "EQUIP:19d005";
Regex regex = new Regex (@"(EQUIP:)(\S+)", RegexOptions.IgnoreCase);
string eqlabel = regex.Replace(input, "$1");
string eqnum = regex.Replace(input, "$2");
string eqnumu = eqnum.ToUpperInvariant();
input = string.Format(@"<a title=""View equipment item {1}"" href=""/EquipmentDisplay.asp?eqnum={2}"">{0}{1}</a>", eqlabel, eqnum, eqnumu);
0
ответ дан 18 December 2019 в 09:54
поделиться
public static string FormatToCustomAnchorTag(this string value)
{

    return Regex.Replace(value.ToLower() + value.ToUpper(),
                @"(?<equiplo>equip:)(?<equipnolo>\S+)(?<equipup>EQUIP:)(?<equipnoup>\S+)",
                @"<a title=""View equipment item ${equipnolo}"" href=""/EquipmentDisplay.asp?eqnum=${equipnoup}"">${equipup}${equipnolo}</a>");
}
0
ответ дан 18 December 2019 в 09:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: