.net 正则表达式:查找整个模式,部分替换

.net 正则表达式:查找整个模式,部分替换,.net,regex,replace,substring,.net,Regex,Replace,Substring,我必须找到如下字符串: "^some_text/some_number$" 例如: "thetext/34526435" 如果some_text为“generic”,则取斜杠后的数字,将“generic”替换为空字符串,否则取some_text将数字和斜杠替换为空字符串 对于一个正则表达式,这可能吗 我正在使用Microsoft.NET中的Regex.Replace。在C#中,是的 C#正则表达式有一种称为MatchEvaluator的东西。请看这里: 将为每个匹配调用MatchEvalu

我必须找到如下字符串:

"^some_text/some_number$"
例如:

"thetext/34526435"
如果
some_text
为“generic”,则取斜杠后的数字,将“generic”替换为空字符串,否则取
some_text
将数字和斜杠替换为空字符串

对于一个正则表达式,这可能吗

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

在C#中,是的

C#正则表达式有一种称为MatchEvaluator的东西。请看这里:

将为每个匹配调用MatchEvaluator,询问它应该如何处理找到的值。它决定的任何内容都将被替换到字符串中,因此您可以根据不同的值使用不同的替换逻辑。

在python中,是的

re
模块有一个名为
sub
的函数,它用repl-like替换字符串中所有出现的正则表达式模式


看一看

您没有说明输入是什么样子的,因此您可能需要修改以下代码。您也没有说明文本部分是什么样子的,所以我只是使用
[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;
});
string sInput=“generic/1234”;
字符串sOutput=Regex.Replace(sInput,“^(?[a-zA-Z]+)/(?\\d+$”,委托(匹配m)
{
返回m.Groups[“mytext”].Value.Equals(“通用”,StringComparison.OrdinalIgnoreCase)?m.Groups[“mynum”]。Value:m.Groups[“mytext”].Value;
});
您提到,如果文本部分是“通用”的,那么您将使用数字,但您没有说是否仍应包含斜杠

此外,该代码仅适用于特定的“文本/数字”模式。如果原始字符串与模式不匹配,它将返回原始字符串。

尝试将
^(通用/([0-9]+)|([a-z]+)/[0-9]+)$
替换为
$2$3
()

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;
});