#c# #regex
#c# #регулярное выражение
Вопрос:
Я должен проверить, соответствуют ли эти два URL шаблону (или 2, если быть более точным). Если это так, я хотел бы извлечь некоторую часть данных.
1) /selector/en/any-string-chain-you-want.aspx?FamiId=32
Затем мне нужно извлечь «en» и «32» в переменные. Для меня выражение regex должно выглядеть примерно как /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}: двухбуквенный код языка, такой как en, fr, nl, es, … {1}: целые числа идентификатора семейства (2 или 3 числа), такие как 12, 38, 124 и т.д., Но не 1212
Есть идеи о том, как этого добиться?
Заранее спасибо,
Roland
Ответ №1:
Это регулярное выражение:
/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/([a-z]{2})/F/([0-9] )/. ?.html
(код не меняется)
Ответ №2:
Вам следует ознакомиться с этим руководством по регулярным выражениям.
Вы могли бы использовать следующие выражения:
/selector/([a-z]{2})/.*.aspx?FamiId=([0-9]{2,3})
и
/selector/([a-z]{2})/F/([0-9]{2,3})/.*.html
Ответ №3:
Вы можете попробовать с:
^/.*?/(w{2})/(?:F/|.*?FamiId=)(d{2,3}).*$
Это работает для обоих URL-адресов.
Ответ №4:
Пример 1
private const string Regex1 = @"/selector/(ww)/. .aspx?FamiId=(d )";
Случай 2
private const string Regex2 = @"/selector/(ww)/F/(d )/. .html";
Использование
Match m = Regex.Match(myString, Regex2);
string lang = m.Groups[1].Value;
string numericValue = m.Groups[2].Value;
Ответ №5:
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);
Вот так.
Ответ №6:
Полезно немного изучить регулярные выражения для подобных случаев. RegExr — это бесплатный онлайн-инструмент для создания регулярных выражений. Однако наиболее полезным, что я нашел, является Expresso
Ответ №7:
вы можете использовать что-то вроде этого
String urlSchema1= @"/selector/(<lang>ww)/. .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>ww)/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;
}