我希望拿一个看起来像的网址:
http://www.example.com/activated-alumina-desiccant/t101c5.aspx
并改为:
http://www.example.com/Default.aspx?t=101&c=5
我还希望能够灵活地添加其他查询字符串变量,例如:
http://www.example.com/activated-alumina-desiccant/t101c5p232.aspx
这会让我:
http://www.example.com/Default.aspx?t=101&c=5&p=232
到目前为止,我已经开始了我的需求,[^/]+$
这让我得到了网址的最后一部分,但除此之外,我如何分解最后一点并分离ino查询字符串变量?我很难过!
这是正则表达式的用武之地:
答案 0 :(得分:3)
此正则表达式将拆分最多包含3个查询字符串变量的URL:
([^/]+//+[^/]+/)[^/]+/(\w)?(\d+)?(\w)?(\d+)?(\w)?(\d+)?\.aspx
将其用于替换字符串:
"$1Default.aspx?$2=$3&$4=$5&$6=$7"
修改强>
如果尾随&=
,例如http://www.example.com/Default.aspx?t=101&=&=
,不会导致问题,您可以使用一个正则表达式,设置为转换预期的最大查询字符串变量数。此最大值受替换字符串中正则表达式引擎允许的捕获组数量的限制(9个捕获组的绝对最大值为4,99绝对最大值为49)。
如果尾随&=
出现问题,则需要为预期的每个不同数量的查询字符串变量输入正则表达式。考虑到这一点,必须稍微修改正则表达式(2-querystring示例):
正则表达式:([^/]+//+[^/]+/)[^/]+/(\w)(\d+)(\w)(\d+)\.aspx
替换:"$1Default.aspx?$2=$3&$4=$5"
答案 1 :(得分:0)
注意:初学者C#代码。
Ideone Demo
string s="t101c5p2";
string[]arr= Regex.Split(s,"(?<=[0-9])(?=[a-zA-Z])");
foreach(String str in arr)
{
string replaceStr = new Regex("([a-z])([0-9])").Replace(str,"$1=$2");
Console.WriteLine(replaceStr);
}
输出:
t=101
c=5
p=2
答案 2 :(得分:0)
string url = "http://www.example.com/activated-alumina/t101c5p232.aspx";
var segment = new Uri(url).Segments.Last();
var parameters =
String.Join("&", Regex.Matches(segment, @"([a-zA-Z]+)(\d+)")
.OfType<Match>()
.Select(m => m.Groups[1] + "=" + m.Groups[2]));
string result = "http://www.example.com/Default.aspx?" + parameters;
// http://www.example.com/Default.aspx?t=101&c=5&p=232