我必须找到如下字符串:
"^some_text/some_number$"
例如:
"thetext/34526435"
如果some_text
是“generic”,则取斜杠后的数字,将“generic”替换为空字符串,否则将some_text
替换为数字,将斜杠替换为空字符串。
这是否可以使用一个正则表达式?
我正在使用Microsoft.NET中的Regex.Replace
。
答案 0 :(得分:2)
在C#中,是的。
C#正则表达式有一个名为MatchEvaluator的东西。见这里:
http://msdn.microsoft.com/en-us/library/cft8645c.aspx
每次匹配都会调用MatchEvaluator,询问它应该对找到的值做什么。无论它决定什么都将被替换为字符串,因此您可以根据值使用不同的替换逻辑。
答案 1 :(得分:0)
答案 2 :(得分:0)
您没有说明输入是什么样的,因此您可能需要调整以下代码。您还没有说明文本部分是什么样的,所以我只使用[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;
});
您提到如果文本部分是“通用”,您可以使用该数字,但是您没有说明是否仍应包含斜杠。
此外,代码仅适用于特定的“文本/数字”模式。如果原始字符串与模式不匹配,它将返回原始字符串。
答案 3 :(得分:0)
尝试将^(generic/([0-9]+)|([a-z]+)/[0-9]+)$
替换为$2$3
(demo)。