Regex,用于在字符大小写上添加正向斜杠
本文关键字:添加 大小写 用于 字符 Regex | 更新日期: 2023-09-27 18:20:22
诚然,正则表达式是我的氪石,我甚至不知道从哪里开始。
我需要取一个像FolderSubfolder1Subfolder2这样的字符串,并将其转换为Folder/Subfolder1/Subfolder2(如果需要,可以使用带前缀的正斜杠)。基本上,每当出现大写字母时,我都需要在出现之前添加斜杠。
一个C#使用的例子是值得赞赏的,但不是必需的。
谢谢!
您可以尝试:
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();
}