我必须找到如下字符串:
"^some_text/some_number$"
例如:
"thetext/34526435"
如果some_text
是“通用”,则取斜杠后的数字,将“通用”替换为空字符串,否则some_text
将数字和斜杠替换为空字符串。
这可以用一个正则表达式吗?
我正在使用Regex.Replace
Microsoft.NET。
在 C# 中,是的。
C# 正则表达式有一个叫做 MatchEvaluator 的东西。看这里:
http://msdn.microsoft.com/en-us/library/cft8645c.aspx
每次匹配都会调用 MatchEvaluator,询问它应该如何处理找到的值。无论它决定什么都将被替换到字符串中,因此您可以根据值具有不同的替换逻辑。
您没有说明输入的情况,因此您可能需要修改以下代码。您也没有说明文本部分的情况,所以我只是[a-zA-Z]
用作指导。随意更改为您用来检查它是否是有效文本部分(例如\w
或其他内容)的方法。
委托的返回值可能看起来很简洁,但从问题的措辞来看,感觉不应该有太多的代码行之类的。随意扩展 if 语句和诸如此类的东西。
string sInput = "generic/1234";
string sOutput = Regex.Replace(sInput, "^(?<mytext>[a-zA-Z]+)/(?<mynum>\\d+)$", delegate(Match m)
{
return m.Groups["mytext"].Value.Equals("generic", StringComparison.OrdinalIgnoreCase) ? m.Groups["mynum"].Value : m.Groups["mytext"].Value;
});
您提到如果文本部分是“通用的”,您将使用数字,但您没有说明是否仍应包含斜杠。
此外,该代码仅适用于特定的“文本/数字”模式。如果原始字符串与模式不匹配,它将返回原始字符串。
尝试替换^(generic/([0-9]+)|([a-z]+)/[0-9]+)$
为$2$3
( demo )。