用于检查字符串是否以某个子字符串开头的正则表达式模式?
什么是正则表达式来检查字符串是以“mailto”,“ftp”还是“joe”开头还是……
现在我正在使用C#和类似的代码在一个很大的o中:
String.StartsWith("mailto:") String.StartsWith("ftp")
看起来像正则表达式会更好。 或者我在这里缺少一种C#方式?
你可以使用:
^(mailto|ftp|joe)
但说实话, StartsWith
在这里完全没问题。 您可以按如下方式重写它:
string[] prefixes = { "http", "mailto", "joe" }; string s = "joe:bloggs"; bool result = prefixes.Any(prefix => s.StartsWith(prefix));
如果要解析URI,还可以查看System.Uri
类。
以下将匹配以mailto
, ftp
或http
开头的任何字符串:
RegEx reg = new RegEx("^(mailto|ftp|http)");
要打破它:
-
^
匹配行的开头 -
(mailto|ftp|http)
匹配由|
分隔的任何项目
在这种情况下,我会发现StartsWith
更具可读性。
StartsWith方法会更快,因为没有解释正则表达式的开销,但这是你如何做到的:
if (Regex.IsMatch(theString, "^(mailto|ftp|joe):")) ...
^
匹配字符串的开头。 您可以在括号之间放置任何协议|
字符。
编辑:
另一种快得多的方法是获取字符串的开头并在开关中使用。 交换机使用字符串设置哈希表,因此它比比较所有字符串更快:
int index = theString.IndexOf(':'); if (index != -1) { switch (theString.Substring(0, index)) { case "mailto": case "ftp": case "joe": // do something break; } }
如果您只打算检查字符串的开头,我真的建议在Regex.IsMatch上使用String.StartsWith方法。
- 首先,C#中的正则表达式是一种语言中的语言,无助于理解和代码维护。 正则表达式是一种DSL 。
- 其次,许多开发人员不理解正则表达式:这是许多人无法理解的东西。
- 第三,StartsWith方法为您提供了一些function,以启用正则表达式无法识别的文化相关比较。
在您的情况下,只有在计划将来实施更复杂的字符串比较时,才应使用正则表达式。