【问题标题】:Regex: find whole pattern, replace partially正则表达式:查找整个模式,部分替换
【发布时间】:2013-06-07 06:54:40
【问题描述】:
我必须找到如下字符串:
"^some_text/some_number$"
例如:
"thetext/34526435"
如果some_text 是“通用”,则取斜杠后面的数字,将“通用”替换为空字符串,否则将some_text 替换为空字符串。
用一个正则表达式可以吗?
我正在使用来自 Microsoft.NET 的 Regex.Replace。
【问题讨论】:
标签:
.net
regex
replace
substring
【解决方案2】:
在 python 中,是的。
re 模块有一个名为sub 的函数,它用repl 替换string 中所有出现的正则表达式pattern,例如
sub(pattern,repl, string)
看看here
【解决方案3】:
您没有说明输入的内容,因此您可能需要修改以下代码。您也没有说明文本部分的情况,所以我只是使用[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;
});
您提到如果文本部分是“通用的”,您将使用数字,但您没有说明是否仍应包含斜杠。
此外,代码仅适用于特定的“文本/数字”模式。如果原始字符串与模式不匹配,它将返回原始字符串。
【解决方案4】:
尝试将^(generic/([0-9]+)|([a-z]+)/[0-9]+)$ 替换为$2$3 (demo)。