首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于在字符大小写上添加正斜杠的正则表达式

用于在字符大小写上添加正斜杠的正则表达式
EN

Stack Overflow用户
提问于 2013-06-30 19:55:15
回答 3查看 884关注 0票数 0

无可否认,正则表达式是我的克星,我甚至不知道从哪里开始。

我需要获取一个像FolderSubfolder1Subfolder2这样的字符串,并将其转换为文件夹/子文件夹1/子文件夹2(如果需要,可以使用前缀正斜杠)。基本上,只要出现大写字母,我就需要在出现之前添加正斜杠。

希望有C#使用示例,但不是必需的。

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-06-30 20:01:51

如果前一个字符是小写字母或数字,则会在大写字母前插入斜杠:

代码语言:javascript
复制
Regex regex = new Regex(@"(?<=[\p{Ll}\d])(?=\p{Lu})");
newStr = regex.Replace(str, "/");
票数 1
EN

Stack Overflow用户

发布于 2013-06-30 20:05:07

您可以尝试:

代码语言:javascript
复制
string result = Regex.Replace(myString, "(?<!^)([A-Z])", "/$1");

它将在任何大写字母之前插入一个正斜杠,前提是它不在字符串的开头。

编辑:作为解释,(?<!^)是一个negative lookbehind assertion -即,如果它前面是字符串^的开头,就不匹配它

括号内的[A-Z]是一个捕获区域,无论匹配成功与否,都会插入替换字符串中$1所在的位置。

注意:如果您希望用斜杠分隔路径名中的数字/其他字符,这将会失效,您必须根据需要进行调整。

票数 2
EN

Stack Overflow用户

发布于 2013-06-30 20:04:55

使用regex,您可以做到这一点

代码语言:javascript
复制
string input = "FolderSubfolder1Subfolder2 ";
string replaced = Regex.Replace(input, @"([A-Z])", "/$1").TrimStart('/');

在没有regex的情况下,您可以使用此方法(快速测试表明,此方法在编译时几乎比regex快3倍,比regex快两倍)

代码语言:javascript
复制
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();
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17390097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档