python - 每个算术运算符仅匹配一次

标签 python regex

我必须匹配以下类型的字符串:

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 | 匹配 +*

的 2 种变体之一
^[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 个大写字符
  • $

Regex demo

关于python - 每个算术运算符仅匹配一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58069238/

相关文章:

python - 在Python中创建任意深度的嵌套字典

python - 使用 scipy least_squares 时出现 ValueError

javascript - 匹配特殊字符之间的最后一个字符串

regex - 为什么 `perl -pe ' s/$/\n/g'` 添加 2 个空行?

regex - 使用带有正则表达式的变量在 mongodb 中查找数据(Meteor 应用程序)

python - 如何绘制预测值与真实值的关系图?

python - Python代码中的逻辑问题

regex - 用于在 CSV 文件中查找未转义双引号的正则表达式

regex - URL中作为参数传递的特殊字符

python - Django Rest框架绕过嵌套关系中的实体