繁体   English   中英

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

[英]Extract portion of these urls with RegEx and c#

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

1) /selector/ en /any-string-chain-you-want.aspx?FamiId= 32

然后我需要将“en”和“32”提取到变量中。 对我来说,正则表达式应该大致类似于 /selector/{0}/any-string-chain-you-want.aspx?FamiId={1}

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

其中 en 和 32 必须赋值给变量。 所以:/selector/{0}/F/{1}/any-string-chain-you-want.html

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

关于如何实现它的任何想法?

提前致谢,

罗兰

情况1

private const string Regex1 = @"/selector/(\w\w)/.+\.aspx?FamiId=(\d+)";

案例二

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;

你应该看看这个关于正则表达式的教程。

您可以使用以下表达式:

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

\/selector\/([a-z]{2})\/F\/([0-9]{2,3})\/.*\.html

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

这是正则表达式:

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

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

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);

那里有 go。

您可以尝试:

^/.*?/(\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;
 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM