我试图编写一个正则表达式以按任意顺序捕获两种类型的组。
特别是,我试图捕获所有这些模式:
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
我认为我已经很接近了,但是我缺少的是+和*组可以(可选地并且只能出现一次)任何顺序的事实。
答案 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}$
或者例如如果不希望使用ab*2.0*2
,我们可能会尝试:
^[a-z]{2}(?:(\*\d+(?:\.\d{1,2})?)(\+\d+(?:\.\d{1,2})?)?|(\+\d+(?:\.\d{1,2})?)(\*\d+(?:\.\d{1,2})?)?)?$
该表达式在regex101.com的右上角进行了解释,如果您想探索/简化/修改它,在this link中,您可以观察到它如何与某些示例输入匹配,如果你喜欢。