gpt4 book ai didi

c# - 无法识别捕获组的 RegEx

转载 作者:太空宇宙 更新时间:2023-11-03 12:03:33 25 4
gpt4 key购买 nike

我有以下正则表达式:

(?:\/(?<root>family-resources|employer-resources|newsroom|text-pages))?\/(?:(?<path>[0-9A-z=\-\s]+\/?)+)

如您所见,我正在尝试设置两个命名的捕获组 - rootpath。但是,当运行它并检查匹配组时,没有 root 组 - 只有 path

使用 C#:

root = match.Groups["root"]?.Value ?? "Text Pages"; // Returns an empty string as the root group is missing.

我能够通过在 https://regex101.com/ 上运行正则表达式模式来重现这一点.

如果你输入以下测试字符串:

/sitecore/content/Corporate-New/home/employer-resources/back-up-care

您会注意到您只会返回一个命名的捕获组 - path
为什么 root 没有被返回?

看来我正在为命名的捕获组使用正确的语法。我试过在捕获组外和正则表达式模式内添加括号,但都没有用。我在想,也许 Regex 模式没有被理解。

regex101 result screenshot

最佳答案

试试这个正则表达式:

(?:.*\/(?<root>family\-resources|employer\-resources|newsroom|text\-pages))?\/(?:(?<path>[0-9A-z=\-\s]+\/?)+)

我在每个 - 前面添加了一个反斜杠,因为它们是保留的,并且在开头添加了一个 .* 以接受第一组之前的任何路径。

RegEx

(?: ) 要求括号之间的所有内容都在非捕获组中。 .* 允许路径的开头与模式匹配。否则,遇到的第一个斜杠将匹配并停止解析(在 sitecore)。

另一种解决方案是使用后视:

(?<=\/)(?<root>family\-resources|employer\-resources|newsroom|text\-pages)?\/(?:(?<path>[0-9A-z=\-\s]+\/?)+)

这稍微高级一些,但更接近您尝试实现的目标。

关于c# - 无法识别捕获组的 RegEx,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56068811/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com