正则表达式用反斜杠作为模式终止符

时间:2015-03-25 18:28:43

标签: c# .net regex

我试图让JJ01G3C5-10A6S0脱离:

\\JJ01G3C5-10A6S0\C$\2015\Mar\24\

Regex reg = new Regex("[^\\\\].+\\");

注意:我不能假设该值将特别采用这种格式,因此我终止字符串的唯一方法是假设它以双反斜杠开头\\然后是一些数据......然后以一个数据终止反斜杠\

然而这引起了我的注意:

  

未处理的异常:System.ArgumentException:解析"[^\\].+\" - 模式结尾处的非法\

有没有办法让反斜杠作为正则表达式终结符?

3 个答案:

答案 0 :(得分:3)

当您编写正则表达式时,最好使用verbatim string literals,即将@作为双引号字符串的前缀。这可以防止编译器将反斜杠视为转义字符。如果没有@,则需要将所有反斜杠加倍。

此外,您不需要使用方括号。这些是用于角色类。

Regex reg = new Regex("^\\\\\\\\.+\\\\");

或等效(更容易理解)

Regex reg = new Regex(@"^\\\\.+?\\");

这解析为:

  • ^行首
  • \\表示字面反斜杠
  • \\表示另一个字面反斜杠
  • .+?意味着不止一个字符
  • \\表示另一个字面反斜杠

+?符号表示它非贪婪,它匹配尽可能少的字符,以使整个事物匹配。否则它会尝试匹配所有内容。

答案 1 :(得分:3)

替代假设它是一条未路径:

string unc_server_name = new Uri(@"\\JJ01G3C5-10A6S0\C$\2015\Mar\24\").Host;

答案 2 :(得分:2)

您可以使用此正则表达式:

Regex regex = new Regex(@"(?<=\\\\)[^\\]*(?=\\)");

RegEx Demo