我目前有以下正则表达式:
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]+
第一个[在第二行与第一行匹配],而它应该是第二行]。
要在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|$))+)
请注意,character class可以更新为[A-Za-z0-9,_]+
,您可以在其中列出每个字符一次。