我目前有以下正则表达式:
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,-,_]+)]+
但是,这不起作用,并在最后一个括号中显示错误:“不匹配的括号”。
有人知道我该如何表达吗?
谢谢!
更新 问题似乎出在[]内部。 仅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]+
第二行中的第一个[与第一行匹配,而应该是第二个]。
答案 0 :(得分: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|$))+)
请注意,character class可以更新为[A-Za-z0-9,_]+
,您可以在其中列出每个字符一次。