无可否认,正则表达式是我的克星,我甚至不知道从哪里开始。
我需要获取一个像FolderSubfolder1Subfolder2这样的字符串,并将其转换为文件夹/子文件夹1/子文件夹2(如果需要,可以使用前缀正斜杠)。基本上,只要出现大写字母,我就需要在出现之前添加正斜杠。
希望有C#使用示例,但不是必需的。
谢谢!
发布于 2013-06-30 20:01:51
如果前一个字符是小写字母或数字,则会在大写字母前插入斜杠:
Regex regex = new Regex(@"(?<=[\p{Ll}\d])(?=\p{Lu})");
newStr = regex.Replace(str, "/");发布于 2013-06-30 20:05:07
您可以尝试:
string result = Regex.Replace(myString, "(?<!^)([A-Z])", "/$1");它将在任何大写字母之前插入一个正斜杠,前提是它不在字符串的开头。
编辑:作为解释,(?<!^)是一个negative lookbehind assertion -即,如果它前面是字符串^的开头,就不匹配它
括号内的[A-Z]是一个捕获区域,无论匹配成功与否,都会插入替换字符串中$1所在的位置。
注意:如果您希望用斜杠分隔路径名中的数字/其他字符,这将会失效,您必须根据需要进行调整。
发布于 2013-06-30 20:04:55
使用regex,您可以做到这一点
string input = "FolderSubfolder1Subfolder2 ";
string replaced = Regex.Replace(input, @"([A-Z])", "/$1").TrimStart('/');在没有regex的情况下,您可以使用此方法(快速测试表明,此方法在编译时几乎比regex快3倍,比regex快两倍)
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();
}https://stackoverflow.com/questions/17390097
复制相似问题