2013-06-30 101 views
0

诚然,正则表达式是我的氪石,我甚至不知道从哪里开始与这一个。正则表达式添加正斜杠上字套管

我需要带一个像FolderSubfolder1Subfolder2这样的字符串,并将它变成文件夹/子文件夹1 /子文件夹2(如果需要,前缀正斜杠是可以的)。基本上我需要在发生之前添加正斜线,只要有大写字母。

A C#使用例如将被理解的,但不是必需的。

谢谢!

回答

1

此,如果前一个字符是一个小写字母或数字的大写字母前插入一个斜杠:

Regex regex = new Regex(@"(?<=[\p{Ll}\d])(?=\p{Lu})"); 
newStr = regex.Replace(str, "/"); 
+0

谢谢你,我先试了一下,它完美的工作。 – user2536392

1

用正则表达式,你可以做到这一点

string input = "FolderSubfolder1Subfolder2 "; 
string replaced = Regex.Replace(input, @"([A-Z])", "/$1").TrimStart('/'); 

没有正则表达式,你可以使用这种方法(快速测试表明,这种方法比正则表达式快3倍,比编译时的正则表达式快两倍)

public string AddSlash(string input) 
{ 
    StringBuilder sb = new StringBuilder(); 
    for(int i = 0;i < input.Length; i++) 
    { 
     if (Char.IsUpper(input[i]) && i > 0) 
      sb.Append('/'); 

     sb.Append(input[i]); 
    } 

    return sb.ToString(); 
} 
2

你可以尝试:

string result = Regex.Replace(myString, "(?<!^)([A-Z])", "/$1"); 

这将任何大写字母前插入一个斜杠,只要不是在你的字符串的开头。

编辑:解释的方式,将(?<!^)negative lookbehind assertion - 也就是说,如果它是由字符串^

[A-Z]括号内开始之前不匹配,这是一个捕捉区域,无论是成功地匹配,然后插入其中$1住在替换字符串中。

注:这会倒下,如果你有数字,你想用斜杠分隔/其他字符的路径名,你就必须适应的要求。

相关问题