C# 检查多个正则表达式模式的字符串
我目前正在尝试对一个字符串运行两种不同的正则表达式模式,以比较该字符串是myspace.com还是使用C#的last.fm url 我使用一个带有以下代码的正则表达式来实现它:C# 检查多个正则表达式模式的字符串,c#,regex,C#,Regex,我目前正在尝试对一个字符串运行两种不同的正则表达式模式,以比较该字符串是myspace.com还是使用C#的last.fm url 我使用一个带有以下代码的正则表达式来实现它: public string check(string value) { Regex DescRegexShortened = new Regex(@"myspace\.com\/([a-zA-Z0-9_-]*)"); Match DescRegexShortenedMatch = DescRegexSho
public string check(string value)
{
Regex DescRegexShortened = new Regex(@"myspace\.com\/([a-zA-Z0-9_-]*)");
Match DescRegexShortenedMatch = DescRegexShortened.Match(value);
string url = "";
if (DescRegexShortenedMatch.Success)
{
url = DescRegexShortenedMatch.Value;
}
return url;
}
现在我的问题是,有没有更简单的方法来检查字符串是myspace.com还是last.fm url
Regex DescRegexShortened = new Regex(@"myspace\.com\/([a-zA-Z0-9_-]*)");
Regex mySpaceRegex = new Regex(@"last\.fm\/([a-zA-Z0-9_-]*)");
例如:
如果字符串匹配regex1或regex2,那么…这可能太明显了:
var rx1 = new Regex(@"myspace\.com\/([a-zA-Z0-9_-]*)");
var rx2 = new Regex(@"last\.fm\/([a-zA-Z0-9_-]*)");
if ( rx1.IsMatch(value) || rx2.IsMatch(value) )
{
// Do something.
}
这可能太明显了:
var rx1 = new Regex(@"myspace\.com\/([a-zA-Z0-9_-]*)");
var rx2 = new Regex(@"last\.fm\/([a-zA-Z0-9_-]*)");
if ( rx1.IsMatch(value) || rx2.IsMatch(value) )
{
// Do something.
}
您可以在正则表达式中使用交替来检查不同的值,而不是检查多个正则表达式:
var regex = new Regex(@"(?<domain>myspace\.com|last\.fm)/[a-zA-Z0-9_-]*");
var match = regex.Match(value);
if (match.Success)
{
var domain = match.Groups["domain"].Value;
// ...
}
else
{
// No match
}
var regex=new regex(@“(?myspace\.com|last\.fm)/[a-zA-Z0-9_-]*”;
var match=regex.match(值);
如果(匹配成功)
{
var domain=match.Groups[“domain”].Value;
// ...
}
其他的
{
//没有对手
}
在这种情况下,可选的是myspace\.com | last\.fm
,它与myspace.com
或last.fm
匹配。替代项位于命名组域中,若正则表达式匹配,您可以像在代码中一样访问该命名组的值
不使用正则表达式,您可以只检查字符串是否以myspace.com
或last.fm
开头,或者URL是否是真正的URL,使用适当的语法,如http://myspace.com/bla
您可以创建Uri
类的实例,然后检查Host
属性
如果您想使用正则表达式,您可能应该将其更改为不匹配域,如fakemyspace.com
,但仍然匹配MYSPACE.com
您可以在正则表达式中使用交替来检查不同的值,而不是检查多个正则表达式:
var regex = new Regex(@"(?<domain>myspace\.com|last\.fm)/[a-zA-Z0-9_-]*");
var match = regex.Match(value);
if (match.Success)
{
var domain = match.Groups["domain"].Value;
// ...
}
else
{
// No match
}
var regex=new regex(@“(?myspace\.com|last\.fm)/[a-zA-Z0-9_-]*”;
var match=regex.match(值);
如果(匹配成功)
{
var domain=match.Groups[“domain”].Value;
// ...
}
其他的
{
//没有对手
}
在这种情况下,可选的是myspace\.com | last\.fm
,它与myspace.com
或last.fm
匹配。替代项位于命名组域中,若正则表达式匹配,您可以像在代码中一样访问该命名组的值
不使用正则表达式,您可以只检查字符串是否以myspace.com
或last.fm
开头,或者URL是否是真正的URL,使用适当的语法,如http://myspace.com/bla
您可以创建Uri
类的实例,然后检查Host
属性
如果您想使用正则表达式,您可能应该将其更改为不匹配域,如fakemyspace.com
,但仍然匹配MYSPACE.com
,看起来您只关心最后一个.fm或MYSPACE.com,而不关心后面的内容。您能不能不使用正则表达式模式而只使用string.StartsWith或string.Contains?或者您的情况通常需要正则表达式?您的正则表达式在myspace.com上失败?a=b
。Michael是正确的。我目前正在将包含用户名的文本文档上载到应用程序。现在,应用程序将使用API来接收twitter用户的简历和网站。现在,每个网站都将被添加到一个C#列表中,并将通过这两个正则表达式模式运行,检查url是myspace还是last.fm url,因此它背后的用户名与您描述它的方式无关,您可以使用if(value.Contains(“myspace.com/”)| value.Contains(“last.fm/”)
哦,上帝。非常感谢。我没想过。看起来你只关心last.fm或myspace.com,而不关心那之后会发生什么。您能不能不使用正则表达式模式而只使用string.StartsWith或string.Contains?或者您的情况通常需要正则表达式?您的正则表达式在myspace.com上失败?a=b
。Michael是正确的。我目前正在将包含用户名的文本文档上载到应用程序。现在,应用程序将使用API来接收twitter用户的简历和网站。现在,每个网站都将被添加到一个C#列表中,并将通过这两个正则表达式模式运行,检查url是myspace还是last.fm url,因此它背后的用户名与您描述它的方式无关,您可以使用if(value.Contains(“myspace.com/”)| value.Contains(“last.fm/”)
哦,上帝。非常感谢。我没想过。开头的单词边界是在这里使用正则表达式的更好借口。开头的单词边界是在这里使用正则表达式的更好借口。