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

问题描述 投票:1回答:1

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

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

我通过在第二部分添加[] + arround来尝试这个:

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

然而,这不起作用,并给出了最后一个括号的错误:“不匹配的括号”。

有谁知道如何表达这个?

谢谢!

更新问题似乎是[]里面的[]。工作正则表达式只有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]+

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

javascript arrays regex typescript
1个回答
1
投票

要在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,_]+,您可以在其中列出每个字符一次。

© www.soinside.com 2019 - 2024. All rights reserved.