gpt4 book ai didi

javascript - 如何在正则表达式中表达包含命名组的列表?

转载 作者:行者123 更新时间:2023-11-30 19:37:40 25 4
gpt4 key购买 nike

我目前有以下正则表达式:

P:(?<ParentName>[A-Z,a-z,0-9,-,_]+)-(?<ParentAge>[A-Z,a-z,0-9,-,_]+)
C:(?<Child>[A-Z,a-z,0-9,-,_]+)

匹配

P:Bob-30
C:Jane

但是,我希望能够表达一个正则表达式匹配:

P:Jack-35
C:John
C:Marie

我通过在第二部分周围添加 []+ 来尝试这样做:

P:(?<ParentName>[A-Z,a-z,0-9,-,_]+)-(?<ParentAge>[A-Z,a-z,0-9,-,_]+)
[C:(?<Child>[A-Z,a-z,0-9,-,_]+)]+

但是这不起作用并给出错误:'unmatched parenthesis )' for the last parenthesis.

有人知道我该如何表达吗?

谢谢!

更新问题似乎是 [] 里面的 []。仅适用于 1 个“C:..”行的正则表达式:

P:(?<ParentName>[A-Za-z0-9-_]+)-(?<ParentAge>[A-Za-z0-9-_]+)
C:[A-Za-z0-9-_]+\n

多个“C:..”行的正则表达式无效:

P:(?<ParentName>[A-Za-z0-9-_]+)-(?<ParentAge>[A-Za-z0-9-_]+)
[C:[A-Za-z0-9-_]+\n]+

第一个[在第二行匹配第一个],而它应该是第二个]。

最佳答案

Child 中获取 C:John 和 C:Marie组,您可以在子组中捕获重复组:

(?<Child>(?:C:[A-Za-z0-9,_]+(?:\s|$))+)
  • (?<Child>命名组
  • (?:非捕获组
    • C:[A-Za-z0-9,_]+(?:\s|$)匹配 C: 后跟字符类中列出的任何字符,然后匹配空白字符或字符串结尾
  • )+关闭捕获组并重复 1+ 次
  • )关闭命名组

您的模式可能如下所示:

P:(?<ParentName>[A-Za-z0-9,_]+)-(?<ParentAge>[A-Za-z0-9,_]+)\s*(?<Child>(?:C:[A-Za-z0-9,_]+(?:\s|$))+)

Regex demo

请注意 character class可以更新到[A-Za-z0-9,_]+您可以在其中列出每个字符一次。

关于javascript - 如何在正则表达式中表达包含命名组的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55761920/

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