我正在使用正则表达式解决方案,我相信我的解决方案是正确的,但匹配并不像我期望的那样 .
有人可以帮我理解我的想法出错了吗?
这是我正在解决的问题,我的正则表达式,以及出了什么问题:
Problem To Solve
我得到一系列代表文件夹的字符串,例如:
"TopLevelFolder"
"TopLevelFolder\Parent"
"TopLevelFolder\Parent\Child"
我的目标是将这些转换为以下字符串,以便在选择列表中显示:
"TopLevelFolder"
"...\Parent"
"...\...\Child"
My Regex
引擎:Dot Net
语言:C#
(([^\\]+\\)+)
regex101示例:
https://regex101.com/r/zY1oM5/1
这个正则表达式试图:一次或多次,找到一个或多个不是反斜杠的字符,然后是反斜杠,并将该匹配放在捕获组中 .
例如,在“TopLevel \ Parent \ Child”中,将“TopLevel”和“Parent \”中的每一个放入捕获组中 .
What's Going Wrong
此示例中此正则表达式的返回捕获组包括:
"TopLevel\Parent\"
"Parent\"
我相信第一组不应该被捕获,因为我要求最后反斜杠之前的字符不包括反斜杠 .
显然,我的期望和理解是错误的 . 我应该在这做什么,我的理解怎么错?
1 回答
好像你想要一个lazy match . 删除外部捕获组,然后在表达式的末尾添加
?
量词,以便+
不再是greedy . 这将允许按预期捕获每个子字符串 .TopLevel\Parent\Child
的输入将返回:Updated Example
然后你可以用
..\\
替换/([^\\]+\\)+?/g
.输入
TopLevelFolder\Parent\Child
将输出:..\..\Child
.同样,
TopLevelFolder\Parent
将输出..\Parent
.