跟踪系统基本上在任何大写字母之前放置一个空格(当然除了第一个)没有正则表达式,你可以做类似的事情(或者用LINQ做一些更简洁的事情):(注意:没有错误检查,你应该添加它)使用系统;使用System.Collections.Generic;使用System.Linq;使用系统文本;命名空间SO{类程序{staticvoidMain(string[]args){Stringtest="AStringInCamelCase";StringBuildersb=newStringBuilder();foreach(charcintest){if(Char.IsUpper(c)){sb.Append("");}sb.Append(c);}if(test!=null&&test.Length>0&&Char.IsUpper(test[0])){sb.Remove(0,1);}字符串结果=sb.ToString();控制台.WriteLine(结果);}}}这给出了输出AStringInCamelCase你可以使用的外观和感觉如下:string[]tests={"AutomaticTrackingSystem","XMLEditor",};正则表达式r=newRegex(@"(?!^)(?=[AZ])");foreach(测试中的字符串测试){Console.WriteLine(r.Replace(test,""));这会打印(如ideone.com上所示):AutomaticTrackingSystemXMLEditorTheregularexpression(?!^)(?=[A-Z])consistsoftwoassertions:RelatedquestionreferenceSplitDifference当你有几个不同的规则,和/或你想Split而不是Replace,使用断言有所作为这个例子结合了两者:string[]tests={"AutomaticTrackingSystem","XMLEditor","AnXMLAndXSLT2.0Tool",};Regexr=newRegex(@"(?这会打印(例如ideone.com):[Automatic][Tracking][System][XML][Editor][An][XML][And][XSLT][2.0][工具]相关问题我刚刚写了一个函数来完成这个。?用([az])([AZ])替换$1$2(或其他语言的12)。我还有一个替换([AZ]+)([AZ][az])–这将替换“类似NumberOfABCDThings的东西”转换为“ABCD事物的数量”所以在C#中它看起来像:Regexr1=newRegex(@"([az])([AZ])");Regexr2=newRegex(@"([AZ]+)([AZ][az])");NewString=r1.Replace(InputString,"$1$2");NewString=r2.Replace(NewString,"$1$2");(虽然可能有更复杂的写法)如果你可能有标点符号或数字,我想你可以尝试([^AZ])([AZ])作为第一场比赛。好吧,使用lookbehind和lookahead编写这些正则表达式表达式的另一种方法是匹配位置并插入一个空格-即(?和(?在这两种情况下都用""替换-不确定这种方法是否有优势,但它是一种有趣的做法。:)显然,有一个反向正则表达式的选项:-)我们现在可以消除字符串反转,这是另一种方法:使用System;使用System.Linq;使用System.Text.RegularExpressions;classMainClass{publicstaticvoidMain(string[]args){Regexry=newRegex(@"([AZ][az]+|[AZ]+[AZ]|[AZ]|[^A-Za-z]+[^A-Za-z])",RegexOptions.RightToLeft);string[]tests={"AutomaticTrackingSystem","XMLEditor","AnXMLAndXSLT2.0Tool","NumberOfABCDThings","AGoodMan","CodeOfAGoodMan"};foreach(测试中的字符串t){Console.WriteLine("nn{0}--{1}",t,ry.Replace(t,"$1"));}}}输出:AutomaticTrackingSystem——自动跟踪系统XMLEditor——XML编辑器AnXMLAndXSLT2.0Tool——XML和XSLT2.0工具NumberOfABCDThings——ABCD事物的数量AGoodMan——好人CodeOfAGoodMan——好人的代码如果你试图保持首字母缩略词完整,将“[^AZ])([A-Z])”替换为“12”,否则将“(.)([A-Z])”替换为“12”。试试这个:使用系统;使用System.Linq;使用System.Text.RegularExpressions;classMainClass{publicstaticvoidMain(string[]args){varrx=newRegex(@"([az]+[AZ]|[AZ][AZ]+|[AZ]|[^A-Za-z][^A-Za-z]+)");string[]tests={"AutomaticTrackingSystem","XMLEditor","AnXMLAndXSLT2.0Tool","NumberOfABCDThings","AGoodMan","CodeOfAGoodMan"};foreach(stringtintests){stringy=Reverse(t);stringx=Reverse(rx.Replace(y,@"$1"));Console.WriteLine("nn{0}--{1}",y,x);}}staticstringReverse(strings){varca=s.ToCharArray();Array.Reverse(ca);字符串t=新字符串(ca);返回吨;}}输出:metsySgnikcarTcitamotuA--自动跟踪系统rotidELMX--XML编辑器looT0.2TLSXdnALMXnA--一个XML和XSLT2.0工具sgnihTDCBAfOrebmuN--NumberofABCDThingsnaMdooManga-一个好人的代码向后字符串并以大写字母作为终止符。希望RegEx有一个用于向后扫描字符串的参数,这样就不需要上面单独的字符串反转:-)只需使用这个linqone-liner:(对我来说很完美)以上是C#学习教程:Isthereaelegant解析单词并在大写字母前添加空格的方法。如果对大家有用,需要了解更多C#学习教程,希望大家多多关注---publicstaticstringSpaceCamelCase(stringinput){returninput.Aggregate(string.Empty,(old,x)=>$"{old}{(char.IsUpper(x)?"":"")}{x}").TrimStart('');}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
