Regex 正则表达式在两个组中至少强制一个
我必须使用正则表达式解析字符串,其中至少需要两个组中的一个组。我想不出怎么写这个案子 为了说明问题,我们可以考虑解析此案例:Regex 正则表达式在两个组中至少强制一个,regex,go,string-parsing,Regex,Go,String Parsing,我必须使用正则表达式解析字符串,其中至少需要两个组中的一个组。我想不出怎么写这个案子 为了说明问题,我们可以考虑解析此案例: String: aredhouse theball bluegreencar the Match: ✓ ✓ ✓ ✗ 项目之间用空格分隔 每个项目由一个物品、一种颜色和一个物体组成,由以下表达式中的组定义(?P是本例的编码Go版本,但我猜这是适用于任何语言的通用regexp问题。在regex中,有几个特殊符号表示字符或组
String: aredhouse theball bluegreencar the
Match: ✓ ✓ ✓ ✗
(?P是本例的编码Go版本,但我猜这是适用于任何语言的通用regexp问题。在regex中,有几个特殊符号表示字符或组的预期匹配数:
*
-零或更多
+
-一个或多个
?
-零或一
应用这些参数后,您的正则表达式如下所示:
(?P<article>(the|a)?)(?P<colour>(red|green|blue|yellow)+)(?P<object>(car|ball|house)+)\s*
(?P(a))(?P(红|绿|蓝|黄)+)(?P(车|球|屋)+)\s*
没有或只有一篇文章
一种或多种颜色
最后是一个或多个对象
这将与您的测试用例一起工作
/
(?P<article>the|a)? # optional article
(?: # non-capture group, mandatory
(?P<colour>(?:red|green|blue|yellow)+) # 1 or more colors
(?P<object>car|ball|house) # followed by 1 object
| # OR
(?P<colour>(?:red|green|blue|yellow)+) # 1 or more colors
| # OR
(?P<object>car|ball|house) # 1 object
) # end group
/x
/
(?p|a)?#可选条款
(?:#非捕获组,必填
(?P(?:红色|绿色|蓝色|黄色)+1种或更多颜色
(?Pcar | ball | house)#后跟1个对象
|#或
(?P(?:红色|绿色|蓝色|黄色)+1种或更多颜色
|#或
(?Pcar | ball | house)1个对象
)#终端组
/x
它可以简化为:
/
(?P<article>the|a)? # optional article
(?: # non-capture group, mandatory
(?P<colour>(?:red|green|blue|yellow)+) # 1 or more colors
(?P<object>car|ball|house)? # followed by optional object
| # OR
(?P<object>car|ball|house) # 1 object
) # end group
/x
/
(?p|a)?#可选条款
(?:#非捕获组,必填
(?P(?:红色|绿色|蓝色|黄色)+1种或更多颜色
(?Pcar | ball | house)?#后跟可选对象
|#或
(?Pcar | ball | house)1个对象
)#终端组
/x
感谢您的回答。可能我没有正确解释,但我不希望单个“article”或空格匹配。但此regexp没有回答原始问题:将“article”设置为可选,但至少需要一个“color”或“object”。但此regexp没有回答原始问题:将“article”设置为可选le‘可选,但至少需要一种‘颜色’或‘对象’。@MonkeyButter啊,我想我把你的问题搞错了。我想你至少需要一种颜色或对象。