诚然,正则表达式是我的氪石,我甚至不知道从哪里开始与这一个。正则表达式添加正斜杠上字套管
我需要带一个像FolderSubfolder1Subfolder2这样的字符串,并将它变成文件夹/子文件夹1 /子文件夹2(如果需要,前缀正斜杠是可以的)。基本上我需要在发生之前添加正斜线,只要有大写字母。
A C#使用例如将被理解的,但不是必需的。
谢谢!
诚然,正则表达式是我的氪石,我甚至不知道从哪里开始与这一个。正则表达式添加正斜杠上字套管
我需要带一个像FolderSubfolder1Subfolder2这样的字符串,并将它变成文件夹/子文件夹1 /子文件夹2(如果需要,前缀正斜杠是可以的)。基本上我需要在发生之前添加正斜线,只要有大写字母。
A C#使用例如将被理解的,但不是必需的。
谢谢!
此,如果前一个字符是一个小写字母或数字的大写字母前插入一个斜杠:
Regex regex = new Regex(@"(?<=[\p{Ll}\d])(?=\p{Lu})");
newStr = regex.Replace(str, "/");
用正则表达式,你可以做到这一点
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();
}
你可以尝试:
string result = Regex.Replace(myString, "(?<!^)([A-Z])", "/$1");
这将任何大写字母前插入一个斜杠,只要不是在你的字符串的开头。
编辑:解释的方式,将(?<!^)
是negative lookbehind assertion - 也就是说,如果它是由字符串^
的[A-Z]
括号内开始之前不匹配,这是一个捕捉区域,无论是成功地匹配,然后插入其中$1
住在替换字符串中。
注:这会倒下,如果你有数字,你想用斜杠分隔/其他字符的路径名,你就必须适应的要求。
谢谢你,我先试了一下,它完美的工作。 – user2536392