C# 使用正则表达式和c提取这些URL的一部分#

C# 使用正则表达式和c提取这些URL的一部分#,c#,regex,C#,Regex,我必须检查这两个url是否匹配一个模式(或者更准确地说是2)。如果是这样,我想提取部分数据 1) /selector/en/您想要的任何字符串链。aspx?FamiId=32 然后我需要将“en”和“32”提取到变量中。对我来说,正则表达式应该大致类似于/selector/{0}/您想要的任何字符串链。aspx?FamiId={1} 2) /selector/en/F/32/any-string-chain-you-want.html 其中en和32必须分配到变量中。因此: /选择器/{0}/F

我必须检查这两个url是否匹配一个模式(或者更准确地说是2)。如果是这样,我想提取部分数据

1) /selector/en/您想要的任何字符串链。aspx?FamiId=32

然后我需要将“en”和“32”提取到变量中。对我来说,正则表达式应该大致类似于/selector/{0}/您想要的任何字符串链。aspx?FamiId={1}

2) /selector/en/F/32/any-string-chain-you-want.html

其中en和32必须分配到变量中。因此: /选择器/{0}/F/{1}/any-string-chain-you-want.html

{0}:2个字母的语言代码,如en、fr、nl、es,。。。 {1} :族id整数(2或3个数字),如12、38、124等,但不是1212

有什么办法可以实现吗

提前感谢,

罗兰

案例1 案例2 用法
您应该在上查看本教程

您可以使用以下表达式:

\/selector\/([a-z]{2})\/.*\.aspx\?FamiId=([0-9]{2,3})


对于这种情况,学习一点正则表达式是很有用的。是一个免费的在线正则表达式构建工具。然而,我发现最有用的是

这是正则表达式:

/selector/([a-z]{2})/.+?\.aspx\?FamiId=([0-9]+)
代码:

第二种情况的正则表达式:
/selector/([a-z]{2})/F/([0-9]+)/.+?\.html
(代码不变)

好了。

您可以尝试:

^/.*?/(\w{2})/(?:F/|.*?FamiId=)(\d{2,3}).*$

它适用于两个URL。

您可以使用类似的内容

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;
 }
String urlSchema1=@”/selector/(\w\w)/.+\.aspx?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;
字符串FamId=mExprStatic.Groups[“FamId”].Value;
}
字符串urlSchema2=@“/selector/(\w\w)/F/(\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;
字符串FamId=mExprStatic.Groups[“FamId”].Value;
}
\/selector\/([a-z]{2})\/F\/([0-9]{2,3})\/.*\.html
/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);
}
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);
^/.*?/(\w{2})/(?:F/|.*?FamiId=)(\d{2,3}).*$
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;
 }