使用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

你知道如何实现它吗?

提前感谢

罗兰

使用RegEx和c#提取这些URL的一部分

这是正则表达式:

/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;
 }