使用RegEx和c#提取这些URL的一部分
本文关键字:URL 一部分 提取 RegEx 使用 | 更新日期: 2023-09-27 17:57:58
我必须检查这两个url是否匹配一个模式(或者更准确地说是2)。如果是的话,我想提取一些数据。
1)/selector/en-/any-string-ain-you-want.aspx?FamiId=32
然后我需要将"en"answers"32"提取到变量中。对我来说,正则表达式应该大致类似于/selector/{0}/any-string-ain-you-want.aspx?FamilId={1}
2)/selector/en-/F/32/any-string-ain-you-want.html
其中en和32必须被分配到变量中。因此:/选择器/{0}/F/{1}/any-string-ain-you-want.html
{0}:2个字母的语言代码,如en、fr、nl、es,。。。{1} :族id整数(2或3个数字),如12、38、124等,但不是1212
你知道如何实现它吗?
提前感谢
罗兰
这是正则表达式:
/selector/([a-z]{2})/.+?'.aspx'?FamiId=([0-9]+)
代码:
var regex = new Regex(@"/selector/([a-z]{2})/.+?'.aspx'?FamiId=([0-9]+)");
var test = "/selector/en/any-string-chain-you-want.aspx?FamiId=32";
foreach (Match match in regex.Matches(test))
{
var lang = match.Groups[1].Value;
var id = Convert.ToInt32(match.Groups[2].Value);
Console.WriteLine("lang: {0}, id: {1}", lang, id);
}
第二种情况的Regex:/selector/([a-z]{2})/F/([0-9]+)/.+?'.html
(代码不变)
您应该看看本教程中的正则表达式。
您可以使用以下表达式:
'/selector'/([a-z]{2})'/.*'.aspx'?FamiId=([0-9]{2,3})
和
'/selector'/([a-z]{2})'/F'/([0-9]{2,3})'/.*'.html
您可以尝试使用:
^/.*?/('w{2})/(?:F/|.*?FamiId=)('d{2,3}).*$
它适用于两个url。
案例1
private const string Regex1 = @"/selector/('w'w)/.+'.aspx?FamiId=('d+)";
案例2
private const string Regex2 = @"/selector/('w'w)/F/('d+)/.+'.html";
用法
Match m = Regex.Match(myString, Regex2);
string lang = m.Groups[1].Value;
string numericValue = m.Groups[2].Value;
string str = @"/selector/en/any-string-chain-you-want.aspx?FamiId=32";
Match m = Regex.Match(str, @"/selector/('w{2})/.+'.aspx'?FamiId=('d{2,3})");
string result = String.Format(@"/selector/{0}/F/{1}/any-string-chain-you-want.html", m.Groups[1].Value, m.Groups[2].Value);
给你。
对于此类情况,学习一些正则表达式非常有用。RegExr是一个免费的在线RegEx构建工具。然而,我发现最有用的是Expresso
您可以使用类似的东西
String urlSchema1= @"/selector/(<lang>'w'w)/.+'.aspx?FamiId=(<FamiId>'d+)";
Match mExprStatic = Regex.Match(inputString,urlSchema1, RegexOptions.IgnoreCase | RegexOptions.Singleline);
if (mExprStatic.Success || !string.IsNullOrEmpty(mExprStatic.Value))
{
String language = mExprStatic.Groups["lang"].Value;
String FamId = mExprStatic.Groups["FamId"].Value;
}
String urlSchema2= @"/selector/(<lang>'w'w)/F/(<FamId>'d+)/.+'.html";
Match mExprStatic = Regex.Match(inputString,urlSchema2, RegexOptions.IgnoreCase | RegexOptions.Singleline);
if (mExprStatic.Success || !string.IsNullOrEmpty(mExprStatic.Value))
{
String language = mExprStatic.Groups["lang"].Value;
String FamId = mExprStatic.Groups["FamId"].Value;
}