当前位置: 首页 > 编程语言 > C#

正则表达式重复CDL捕获?分享

时间:2023-04-10 19:46:49 C#

正则表达式以重复CDL捕获?我有一些这种形式的数据:@“经理爱丽丝,鲍勃,查理主管唐,爱德华,弗朗西斯”我需要这样的扁平化输出:@“经理爱丽丝经理鲍勃经理查理主管唐主管爱德华主管弗朗西斯”实际上面“title”可以是任意单个词,没有离散列表可以使用。替换成rn,简单,和第一个替换一样:替换(^|rn)(S+s)([^,rn]*),s和$1$2$3rn$2但是抓取其他名字,应用相同的前缀是今天我什至无法想象的事情。有什么建议么?我正在寻找一系列一个或多个RegEx.Replace()调用,在C#中没有任何LINQ或过程代码,这当然是微不足道的。实现不直接在C#代码中,我正在配置一个通用解析工具,该工具使用一系列.NET正则表达式来转换来自各种来源的传入数据以供多种用途。这是一个纯粹的替换解决方案:strings=@"ManagersAlice,Bob,CharlieSupervisorsDon,Edward,Francis";Regexr=newRegex(@"(?:^w+)?(w+)(?匹配每一个名字后,lookbehind返回到当前行的开头捕获表头。(?:^w+)?and[,rn]*仅用于消耗您不想保留的字符串部分。如果可以使用LINQ,为什么还要使用正则表达式?strings="经理Alice,Bob,Charliern主管Don,Edward,Francis";varresult=fromlineins.Split(newstring[]{"rn"},StringSplitOptions.None)letparts=line.Split(newchar[]{''},2)lettitle=parts[0]让names=parts[1]fromnameinnames.Split(newchar[]{','})选择title.Trim()+""+name.Trim();string.Join("rn",result)是经理Alice经理Bob经理Charlie主管Don主管Edward主管Francis既然您强调了对正则表达式的需求,那么这个解决方案应该适合您。stringinput=@"经理Alice,Bob,Charlie主管Don,Edward,Francis";字符串模式=@"(?w+)s+(?:(?w+)(?:,s+)?)+";foreach(在Regex.Matches(input,pattern)中匹配m){Console.WriteLine("Title:{0}",m.Groups["Title"].Value);foreach(在m.Groups["Names"].Captures中捕获c){Console.WriteLine(c.Value);}控制台.WriteLine();主要概念是使用命名的“title”组来存储职位名称并在以后引用它们。名称存储在捕获集合中。此模式仅在数据格式正确时才有效,如示例数据所示。该模式分解如下:(?w+)s+(?:(?w+)(?:,s+)?)+您可以搜索^(w+)[t]+(w+),[t]+(。+)$并替换所有12rn13您需要对您的示例应用两次,如果经理列表增长到四个,则应用三次,等等。因此,在C#中:resultString=Regex.Replace(subjectString,@"^(w+)[t]+(w+),[t]+(.+)$",@"$1$2rn$1$3",RegexOptions.Multiline);说明:^:匹配行首(w+)[t]+:匹配任意数量的alnum字符,捕获匹配;匹配以下空格(w+):匹配下一个“单词”,然后[t]+(.+)$匹配逗号、空格,然后是任何后续内容,直到行尾。只有当该行仍然包含需要拆分的内容时,它才会匹配。以上就是C#学习教程:正则表达式重复CDL捕获?如果分享的所有内容对您有用,需要了解更多C#学习教程,希望您多多关注---本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: