我有以下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)
| 归档时间: |
|
| 查看次数: |
9746 次 |
| 最近记录: |