В остальной части у вас есть только 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...)
Хорошо, 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());
}
Использование Regex. Замените непосредственно, я не думаю, что существует путь. Но Вы могли сделать это двумя процессами шага и получить результат, который Вы ищете.
var match = Regex.Match(input, @"(EQUIP:)(\S+)", RegexOptions.IgnoreCase);
var input = 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());
Можно использовать делегата 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());
}
Принятие, которые вводят, является строкой:
input = Regex.Replace(input.ToUpper, @"(EQUIP:)(\S+)", @"<a title=""View equipment item $2"" href=""/EquipmentDisplay.asp?eqnum=$2"">$1$2</a>", RegexOptions.IgnoreCase);
Изменение случая строки не является чем-то, что regex делает.
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);
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>");
}