Regex,用于在字符大小写上添加正向斜杠

本文关键字:添加 大小写 用于 字符 Regex | 更新日期: 2023-09-27 18:20:22

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

我需要取一个像FolderSubfolder1Subfolder2这样的字符串,并将其转换为Folder/Subfolder1/Subfolder2(如果需要,可以使用带前缀的正斜杠)。基本上,每当出现大写字母时,我都需要在出现之前添加斜杠。

一个C#使用的例子是值得赞赏的,但不是必需的。

谢谢!

Regex,用于在字符大小写上添加正向斜杠

您可以尝试:

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

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

编辑:作为解释,(?<!^)是一个负的后备断言,即如果它前面有字符串^ 的开头,则与此不匹配

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

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

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

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

使用regex,您可以执行此

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();
}