繁体   English   中英

正则表达式:与应排除的字符匹配的捕获组

[英]Regex: Capture Group Matching a Character That Should be Excluded

我在使用正则表达式解决方案时遇到了麻烦,我认为我的解决方案是正确的,但是匹配情况并非我所期望的那样。

有人可以帮我了解我的想法出了什么问题吗?

这是我要解决的问题,我的正则表达式以及出了什么问题:

解决的问题

我得到了一系列代表文件夹的字符串,例如:

"TopLevelFolder"
"TopLevelFolder\Parent"
"TopLevelFolder\Parent\Child"

我的目标是将它们转换为以下字符串以显示在选择列表中:

"TopLevelFolder"
"...\Parent"
"...\...\Child"

我的正则表达式

引擎:点网

语言:C#

(([^\\]+\\)+)

regex101示例:

https://regex101.com/r/zY1oM5/1

此正则表达式试图:一次或多次,找到一个或多个不是反斜杠的字符,然后再找到一个反斜杠,然后将匹配项放入捕获组。

例如,在“ TopLevel \\ Parent \\ Child”中,将“ TopLevel \\”和“ Parent \\”分别放入捕获组。

出了什么问题

在此示例中,此正则表达式返回的捕获组包括:

"TopLevel\Parent\"
"Parent\"

我认为不应捕获第一组,因为我要求最后的反斜杠之前的字符不包括反斜杠。

显然,我的期望和理解是错误的。 我在这里应该做什么?我的理解有何错误?

看来您想进行一场懒惰的比赛 删除外部捕获组,然后添加? 表达式末尾的量词,使+不再贪婪 这将允许按预期捕获每个子字符串。

/([^\\]+\\)+?/g

TopLevel\\Parent\\Child的输入将返回:

TopLevel\
Parent\

更新示例


然后,您可以用..\\\\替换/([^\\\\]+\\\\)+?/g

TopLevelFolder\\Parent\\Child的输入将输出: ..\\..\\Child

同样, TopLevelFolder\\Parent将输出..\\Parent

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM