不可否认,正则表达式是我的氪星石,我甚至不知道从哪里开始。
我需要使用像FolderSubfolder1Subfolder2这样的字符串并将其转换为Folder / Subfolder1 / Subfolder2(如果需要,可以使用带前缀的正斜杠)。基本上我需要在发生大小写字母之前添加正斜杠。
C#使用示例将不胜感激,但不是必需的。
谢谢!
答案 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();
}