用于在字符集上添加正向斜杠的正则表达式

时间:2013-06-30 11:55:15

标签: c# regex

不可否认,正则表达式是我的氪星石,我甚至不知道从哪里开始。

我需要使用像FolderSubfolder1Subfolder2这样的字符串并将其转换为Folder / Subfolder1 / Subfolder2(如果需要,可以使用带前缀的正斜杠)。基本上我需要在发生大小写字母之前添加正斜杠。

C#使用示例将不胜感激,但不是必需的。

谢谢!

3 个答案:

答案 0 :(得分:2)

你可以尝试:

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

如果不在字符串的开头,那么会在任何大写字母前插入正斜杠。

编辑:作为解释,(?<!^)negative lookbehind assertion - 如果它前面是字符串^

的开头,则不匹配

括号内的[A-Z]是一个捕获区域,无论成功匹配,都会插入替换字符串中$1所在的位置。

注意:如果您的路径名称包含您希望用斜杠分隔的数字/其他字符,则会失败,您必须根据需要进行调整。

答案 1 :(得分:1)

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

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

答案 2 :(得分: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();
}
相关问题