0

诚然,正则表达式是我的氪石,我什至不知道从哪里开始。

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

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

谢谢!

4

3 回答 3

2

你可以试试:

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

它将在任何大写字母之前插入一个正斜杠,前提是它不在字符串的开头。

编辑:作为解释,这(?<!^)是一个否定的lookbehind断言- 即如果它前面是字符串的开头,则不匹配^

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

注意:如果您有一个带有数字/其他字符的路径名,您希望用斜杠分隔,这将失败,您必须根据需要进行调整。

于 2013-06-30T12:05:06.887 回答
1

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

Regex regex = new Regex(@"(?<=[\p{Ll}\d])(?=\p{Lu})");
newStr = regex.Replace(str, "/");
于 2013-06-30T12:01:51.470 回答
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();
}
于 2013-06-30T12:04:54.583 回答