诚然,正则表达式是我的氪石,我什至不知道从哪里开始。
我需要获取一个像 FolderSubfolder1Subfolder2 这样的字符串并将其转换为 Folder/Subfolder1/Subfolder2 (如果需要,可以使用前缀正斜杠)。基本上,只要有大写字母,我就需要在发生之前添加正斜杠。
AC# 使用示例将不胜感激,但不是必需的。
谢谢!
你可以试试:
string result = Regex.Replace(myString, "(?<!^)([A-Z])", "/$1");
它将在任何大写字母之前插入一个正斜杠,前提是它不在字符串的开头。
编辑:作为解释,这(?<!^)
是一个否定的lookbehind断言- 即如果它前面是字符串的开头,则不匹配^
括号内[A-Z]
是一个捕获区域,无论成功匹配,然后插入$1
替换字符串中的位置。
注意:如果您有一个带有数字/其他字符的路径名,您希望用斜杠分隔,这将失败,您必须根据需要进行调整。
如果前一个字符是小写字母或数字,则在大写字母之前插入一个斜杠:
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();
}