正则表达式:找到整个模式,部分替换

时间:2013-06-07 06:54:40

标签: .net regex replace substring

我必须找到如下字符串:

"^some_text/some_number$"

例如:

"thetext/34526435"

如果some_text是“generic”,则取斜杠后的数字,将“generic”替换为空字符串,否则将some_text替换为数字,将斜杠替换为空字符串。

这是否可以使用一个正则表达式?

我正在使用Microsoft.NET中的Regex.Replace

4 个答案:

答案 0 :(得分:2)

在C#中,是的。

C#正则表达式有一个名为MatchEvaluator的东西。见这里:

http://msdn.microsoft.com/en-us/library/cft8645c.aspx

每次匹配都会调用MatchEvaluator,询问它应该对找到的值做什么。无论它决定什么都将被替换为字符串,因此您可以根据值使用不同的替换逻辑。

答案 1 :(得分:0)

在python中,是的。

re模块有一个函数calles sub,用 repl string 中所有出现的正则表达式模式 喜欢

sub(pattern,repl, string)

看看here

答案 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$3demo)。