我必须匹配以下类型的字符串:
HELLO
HELLO+2.20
HELLO*1.10
HELLO+2.12*2.99
HELLO*2.30+5.40
加号和星号运算符只能出现一次(及其各自的数量),因此
HELLO+2.20+3.50
HELLO*2.11+1.25*9.99
HELLO*3.33*4.44
不是有效的匹配
我尝试了这个正则表达式:
([A-Z]{2,12}(\*(\d+(?:\.\d{1,2})?))?(\+(\d+(?:\.\d{1,2})?))?)
但仅匹配第一个星号运算符和最后一个加号运算符(两者都是可选的)。此正则表达式不支持这种情况:
HELLO+2.11*3.56
最佳答案
您可以使用 alternation |
匹配 +
和 *
^[A-Z]{2,12}(?:\+\d+\.\d{1,2}(?:\*\d+\.\d{1,2})?|\*\d+\.\d{1,2}(?:\+\d+\.\d{1,2})?)?$
部分内容
^
字符串开头[A-Z]{2,12}
匹配 2-12 个大写字符(?:
非捕获组\+\d+\.\d{1,2}
匹配+
1+ 位数字.
和 1-2 位数字<(?:\*\d+\.\d{1,2})?
可选择与之前以*
开头的内容匹配|
或者\*\d+\.\d{1,2}
匹配*
1+ 位数.
和 1-2 位数<(?:\+\d+\.\d{1,2})?
可选择与之前以+
开头的内容匹配
)?
关闭组并可选择仅匹配 12 个大写字符$
关于python - 每个算术运算符仅匹配一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58069238/