正则表达式在两组中至少执行一个
Regular expression enforcing at least one in two groups
我必须使用正则表达式解析一个字符串,其中至少需要一组两个中的一个。我不知道怎么写这个案例。
为了说明问题我们可以考虑解析这个案例:
String: aredhouse theball bluegreencar the
Match: ✓ ✓ ✓ ✗
- 项目之间用空格分隔
每一项由一篇文章、一种颜色和一个对象组成,按组定义如下表达式(?P<article>the|a)?(?P<colour>(red|green|blue|yellow)*)(?P<object>car|ball|house)?\s*
一个项目可以有 'article' 但必须有 'colour' or/and 和 'object'.
有没有一种方法可以使 'article' 可选,但至少需要一个 'colour' 或 'object' 使用正则表达式?
Here 是此示例的编码 Go 版本,但我想这是适用于任何语言的通用正则表达式问题。
在正则表达式中,有一些特殊符号表示字符或组的预期匹配数:
*
- 零个或多个
+
- 一个或多个
?
- 零个或一个
这些已应用,您的正则表达式如下所示:
(?P<article>(the|a)?)(?P<colour>(red|green|blue|yellow)+)(?P<object>(car|ball|house)+)\s*
- None 或一篇文章。
- 一种或多种颜色。
- 最后一个或多个对象。
这正在处理您的测试用例。
/
(?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<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
我必须使用正则表达式解析一个字符串,其中至少需要一组两个中的一个。我不知道怎么写这个案例。
为了说明问题我们可以考虑解析这个案例:
String: aredhouse theball bluegreencar the
Match: ✓ ✓ ✓ ✗
- 项目之间用空格分隔
每一项由一篇文章、一种颜色和一个对象组成,按组定义如下表达式
(?P<article>the|a)?(?P<colour>(red|green|blue|yellow)*)(?P<object>car|ball|house)?\s*
一个项目可以有 'article' 但必须有 'colour' or/and 和 'object'.
有没有一种方法可以使 'article' 可选,但至少需要一个 'colour' 或 'object' 使用正则表达式?
Here 是此示例的编码 Go 版本,但我想这是适用于任何语言的通用正则表达式问题。
在正则表达式中,有一些特殊符号表示字符或组的预期匹配数:
*
- 零个或多个
+
- 一个或多个
?
- 零个或一个
这些已应用,您的正则表达式如下所示:
(?P<article>(the|a)?)(?P<colour>(red|green|blue|yellow)+)(?P<object>(car|ball|house)+)\s*
- None 或一篇文章。
- 一种或多种颜色。
- 最后一个或多个对象。
这正在处理您的测试用例。
/
(?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<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