【问题标题】:c# regex transforms similar to pythonc# 正则表达式转换类似于python
【发布时间】:2016-05-18 08:29:44
【问题描述】:
如何在 # 中使用类似于此 python 代码的正则表达式转换 # 中的 url
import re
url = http://active.com
url1 = re.sub(r'(^htt[^\/]*\/\/)(.*)',r'\1www\.$2',url)
输入:
http://active.com
预期输出:
http://www.active.com
我怎么能通过 www。来自c#中的一个变量
例如
string domain_part = "www."
那么我必须在转换中使用上述变量吗?
【问题讨论】:
标签:
c#
python
regex
transform
substitution
【解决方案1】:
在 C# 中,Regex.Replace 等效于 Python 的 re.sub。请注意反向引用样式不同:Python 替换字符串中的 \1 在 C# 中是 $1(而 \g<1> 是 ${1})。
C# 中的原始字符串文字具有 @"" 表示法(相当于 Python 中的 r'')。
你可以使用
//var url = "http://www.active.com"; // http://www.active.com
var url = "http://active.com"; // http://www.active.com
var domain_part = "www.";
var regex = new Regex(string.Format(@"(^htt[^/]*//)(?!{0})(.*)", Regex.Escape(domain_part)));
var res = regex.Replace(url, "$1" + domain_part + "$2");
Console.WriteLine(res);
见IDEONE demo
解释:
-
Regex.Escape(domain_part) 转义文字字符串以在正则表达式中使用
-
(^htt[^/]*//)(?!{0})(.*) 包含一个否定的前瞻,如果字符串中已经存在 domain_part,则匹配失败
-
"$1" + domain_part + "$2" 插入动态域部分。