3

我必须找到如下字符串:

"^some_text/some_number$"

例如:

"thetext/34526435"

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

这可以用一个正则表达式吗?

我正在使用Regex.ReplaceMicrosoft.NET。

4

4 回答 4

2

在 C# 中,是的。

C# 正则表达式有一个叫做 MatchEvaluator 的东西。看这里:

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

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

于 2013-06-07T06:58:00.860 回答
0

在 python 中,是的。

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

sub(pattern,repl, string)

看看这里

于 2013-06-07T07:01:30.040 回答
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;
});

您提到如果文本部分是“通用的”,您将使用数字,但您没有说明是否仍应包含斜杠。

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

于 2013-06-07T07:33:19.420 回答
0

尝试替换^(generic/([0-9]+)|([a-z]+)/[0-9]+)$$2$3( demo )。

于 2013-06-07T07:33:56.427 回答