0

我有必要解析和转换某种 URL 部分,我现在是这样做的:

Regex s_re = new Regex(@"^/(lang_([^/]*)/)?([^/]*)([^\?]*)\??(.*)$", RegexOptions.IgnoreCase);

const string Url = "...";

MatchCollection matches = s_re.Matches(Url);
if(matches.Count==0) return false;//can't find matches

string strLang = s_re.Replace(Url, @"$2");
string strAddr = s_re.Replace(Url, @"$3");

我是否正确理解在这种情况下我的 URL 被解析了 3 次(原始匹配和每次替换)。在最好的情况下,它应该只解析一次,并且应该使用结果。

我怀疑我应该使用其他东西,而不是跟随“替换”的调用,但找不到确切的东西。

您能否提一些建议?

谢谢。

4

1 回答 1

1

你应该这样做:

Match match = regexData.Match(line);
if (!match.Success) return false;
string val1 = match.Groups[0].Value;
string val2 = match.Groups[1].Value;

此外,您可能希望将 RegexOptions.CultureInvariant 与 RegexOptions.IgnoreCase 一起使用,否则它会使用本地文化的大小写约定而不是 unicode。更多关于 msdn

于 2012-05-16T02:33:36.297 回答