C#中的正则表达式大写替换

Spr*_*ogz 5 .net c# regex

我有以下C#,它只是将看起来像EQUIP:19d005的输入字符串部分替换为URL,如下所示:

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

HTML最终看起来像这样.

<a title="View equipment item 19d005" href="/EquipmentDisplay.asp?eqnum=19d005">EQUIP:19d005</a>
Run Code Online (Sandbox Code Playgroud)

唯一的麻烦是目标页面要求eqnum查询字符串全部为大写,因此它在eqnum = 19D005时返回正确的设备,但如果收到eqnum = 19d005则失败.

我想我可以修改和纠正EquipmentDisplay.asp对大写值的错误要求,但是,如果可能的话,我想通过在上面的Regex.Replace语句中大写$ 2来使C#代码符合现有的经典ASP页面.

理想情况下,我希望返回的HTML看起来像这样:

<a title="View equipment item 19d005" href="/EquipmentDisplay.asp?eqnum=19D005">EQUIP:19d005</a>
Run Code Online (Sandbox Code Playgroud)

请注意,虽然原始字符串是EQUIP:19d005(小写),但只有eqnum =值是大写的.

它可以做到,如果是这样,最干净的方法是什么?

Dun*_*can 12

好的,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);
Run Code Online (Sandbox Code Playgroud)

另一个使用单独的功能:

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());
}
Run Code Online (Sandbox Code Playgroud)