以任何顺序捕获组

时间:2019-07-19 21:17:03

标签: regex

我试图编写一个正则表达式以按任意顺序捕获两种类型的组。

特别是,我试图捕获所有这些模式:

zz
ab+3
ab*2.0
ab*2.0+3
cd+3*2
xx+10.0*2
yz+1*2

因此模式将是“两个小写字母,可选地后跟+(整数或浮点数加一个小数)和/或*(整数或浮点数加一个小数)”。

我尝试过的是这个

https://regex101.com/r/HEUH1e/1

我认为我已经很接近了,但是我缺少的是+和*组可以(可选地并且只能出现一次)任何顺序的事实。

2 个答案:

答案 0 :(得分:-1)

您可以对第一个运算符使用[+*],然后对第二个运算符使用否定前瞻:(?!\1)[+*]。这样,您可以确保两者不同:

[a-z]{2}(?:([+*])\d+(?:\.\d)?)?(?:(?!\1)[+*]\d+(?:\.\d)?)?

答案 1 :(得分:-1)

我猜您可能正在设计一个类似于以下内容的表达式:

^[a-z]{2}(?:(\*\d+(?:\.\d{1,2})?)?(\+\d+(?:\.\d{1,2})?)?){1,2}$

Demo 1

或者例如如果不希望使用ab*2.0*2,我们可能会尝试:

^[a-z]{2}(?:(\*\d+(?:\.\d{1,2})?)(\+\d+(?:\.\d{1,2})?)?|(\+\d+(?:\.\d{1,2})?)(\*\d+(?:\.\d{1,2})?)?)?$

Demo 2

该表达式在regex101.com的右上角进行了解释,如果您想探索/简化/修改它,在this link中,您可以观察到它如何与某些示例输入匹配,如果你喜欢。