简单数学表达式的正则表达式

2023-12-21

作为练习,我试图想出一个正则表达式来评估简单的代数,例如

q = '23 * 345 - 123+65'

从这里我想得到'23','*','345','-','123','+','65'。

现在,我搜索了类似的问题,其他人已经解决了这个问题。但我真正想知道的是为什么my解决方案不起作用。

这是我得到的最好的:

regexparse = '(\d+\s*(\*|\/|\+|\-)\s*)+(\d+\s*)'

解释

  • (\d+\s*(*|/|+|-)\s*)+
    • ( 一位或多位数字 \d+ 后面可以跟空格 \s* 然后必须跟一个符号 (*|/|+|-) 然后后面可以跟更多空格 \s* 并且整个内容必须出现在至少一次)+
  • (\d+\s*)
    • 一位或多位数字,后面可以跟空格

但是,当我运行代码时

m = re.match(regexparse, q)
print m.group(0)
print m.group(1)
print m.group(2)
print m.group(3)

I get

23 * 345 - 123+65
123+
+
65

所以这就像第一个块匹配尽可能少的字符。为什么?


这是你的正则表达式:

(\d+\s*(\*|\/|\+|\-)\s*)+(\d+\s*)

(\d+\s*(\*|\/|\+|\-)\s*)将匹配表达式的第一部分:23 * 并存储*在第二组中。

然后+使其重复,但由于重复捕获组仅保留最后一个匹配项,因此它将丢弃23 * and *并改为匹配345 - and -在第二组中。

The +在下一次重复时再次工作以丢弃最后一次捕获并改为捕获123+在第一组中和+在第二。

Next, +无法再重复,所以它停止了,并且(\d+\s*)开始匹配得到65.


事实上,重复捕获组仅存储最后一个捕获是正则表达式的设计工作方式,并且在所有正则表达式引擎中都是如此。


进一步阐述:

重复匹配和重复捕获之间是有区别的。尝试:(\d)+ on 12345你会看到只有5将被捕获​​。就像那样,因为你的括号被分配了一个特定的组捕获。第一个组分配为组 1,如果组 1 有很多捕获,则只能保留 1 个,这是最后一个。不幸的是,这就是正则表达式的工作原理,根据文档 http://docs.python.org/2/library/re.html#match-objects:

如果一个组匹配多次,则只能访问最后一次匹配


如果你想得到你想要的输出,你可以使用re.findall并与\d+|[+/*-]:

import re
q = '23 * 345 - 123+65'
regexparse = r'\d+|[+/*-]'
elem = re.findall(regexparse, q)
print(elem)
#=> ['23', '*', '345', '-', '123', '+', '65']
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

简单数学表达式的正则表达式 的相关文章

  • App Engine 上的 Django 与 webapp2 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • docker 容器中的“(pygame parachute)分段错误”

    尝试在 docker 容器中使用 pygame 时出现以下错误 我想从容器中获取显示 Fatal Python error pygame parachute Segmentation Fault 重现 Docker已安装 docker ru
  • 使用 Boto3 超时的 AWS Lambda 函数

    我已经解决了我自己的问题 但无论如何我都会发布它 希望能节省其他人几个小时 我在 AWS 上有一个无服务器项目 使用 Python 将记录插入到 kinesis 队列中 但是 当我使用 boto3 client kinesis 或 put
  • Python3将模块从文件夹导入到另一个文件夹

    我的结构字典是 mainFolder folder1 init py file1 py file2 py folder2 init py file3 py file4 py setup py init py 我需要将 file4 py 从f
  • Python speedtest.net,或等效的[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 是否有一个 Python 库可以实现 SpeedTest net 测试或等效的互联网连接速度测试 GitHub上有一个项目叫速度检查 https gi
  • 会话数据库表清理

    该表是否需要清除或者由 Django 自动处理 Django 不提供自动清除功能 然而 有一个方便的命令可以帮助您手动完成此操作 Django 文档 清除会话存储 https docs djangoproject com en dev to
  • 我可以用关闭的文件对象做什么?

    当您打开文件时 它存储在一个打开的文件对象中 该对象使您可以访问该文件的各种方法 例如读取或写入 gt gt gt f open file0 gt gt gt f
  • 了解 Python 2.7 中的缩进错误

    在编写 python 代码时 我往往会遇到很多缩进错误 有时 当我删除并重写该行时 错误就会消失 有人可以为菜鸟提供 python 中 IndentationErrors 的高级解释吗 以下是我在玩 CheckIO 时收到的最近 inden
  • 使用 python 脚本更改 shell 中的工作目录

    我想实现一个用户态命令 它将采用其参数之一 路径 并将目录更改为该目录 程序完成后 我希望 shell 位于该目录中 所以我想实施cd命令 但需要外部程序 可以在 python 脚本中完成还是我必须编写 bash 包装器 Example t
  • vscode 中正则表达式的不完整量词

    我正在尝试为对象的开头创建一个正则表达式 以便我可以用单个替换完整的块 在vscode的查找和替换中 My Regex id oid 0 9 product id 0 9 我的示例输入 id oid 973 product id 973 p
  • 如何通过selenium中弹出的身份验证?

    我正在尝试使用带有 Selenium 的 Python 脚本加载需要身份验证的网页 options webdriver ChromeOptions prefs download default directory r download de
  • Python脚本从字母和两个字母组合生成单词

    我正在编写一个简短的脚本 它允许我使用我设置的参数生成所有可能的字母组合 例如 b a 参数 单词 5 个字母 第三 第五个字母 b a 第一个字母 ph sd nn mm 或 gh 第二 第四个字母 任意元音 aeiouy 和 rc 换句
  • 如何从邻接表高效创建稀疏邻接矩阵?

    我正在与last fm http labrosa ee columbia edu millionsong lastfm数据集来自百万歌曲数据集 http labrosa ee columbia edu millionsong 数据以一组 j
  • 如何在引发异常时将变量传递给异常并在异常时检索它?

    现在我只有一个空白的异常类 我想知道如何在引发变量时给它一个变量 然后在 try except 中处理它时检索该变量 class ExampleException Exception pass 为其构造函数提供一个参数 将其存储为属性 然后
  • 从给定的项目列表创建子列表

    我首先要说的是以下问题不是为了家庭作业目的即使因为我几个月前就完成了软件工程师的工作 无论如何 今天我正在工作 一位朋友向我询问了这个奇怪的排序问题 我有一个包含 1000 行的列表 每行代表一个数字 我想创建 10 个子列表 每个子列表都
  • tf.print() vs Python print vs tensor.eval()

    看来在Tensorflow中 至少有三种方法可以打印出张量的值 我一直在读here https www freecodecamp org news debugging tensorflow a starter e6668ce72617 an
  • SQLAlchemy 与 count、group_by 和 order_by 使用 ORM

    我有几个函数需要使用 count group by 和 order by 进行一对多连接 我使用 sqlalchemy select 函数生成一个查询 该查询将返回一组 id 然后我对其进行迭代以对各个记录执行 ORM 选择 我想知道是否有
  • py2exe ImportError:没有名为 的模块

    我已经实现了一个名为 myUtils 的包 它由文件夹 myUtils 文件 组成 init py 和许多名称为 myUtils 的 py 文件 该包包含在 myOtherProject py 中 当我从 Eclipse 运行它们时可以找到
  • 数字和小数的输入掩码

    在测试我的程序后 我发现了以下错误 我在 sqlserver 中的表包含 价格数字 6 2 我的程序的用户输入价格 555 00 就很好了 但是当他输入 555555 时 这是错误的 所以我需要指定掩码 其中尾数是可选的 0 到 999 小
  • Chrome 驱动程序和 Chromium 二进制文件无法在 aws lambda 上运行

    我陷入了一个问题 我需要在 AWS lambda 上做一些抓取工作 所以我按照下面提到的博客及其代码库作为起点 这非常有帮助 并且在运行时环境 Python 3 6 的 AWS lambda 上对我来说工作得很好 https manivan

随机推荐

  • 如何使用 Xcode 调试 dylib?

    我有一个 arith 库的 Xcode 项目 我可以使用调试配置来构建它 并且我需要调试它 我怎样才能做到这一点 理想的方法是设置测试代码以在项目文件中构建执行 然后在 arith 库的源代码中设置断点 但是 Xcode arith 项目似
  • 使用 flink runner 在梁上进行 Tensorflow 变换

    这可能看起来很愚蠢 但这是我在这里发表的第一篇文章 抱歉做错了什么 我目前正在使用 python2 7 使用 TFX 0 11 即 tfdv tft tfserving 和tensorflow 1 11 构建一个简单的 ML 管道 我目前有
  • 捆绑安装时出现致命错误(安装 libv8 时)

    我在 Windows 7 32 位 上工作 在捆绑安装时出现错误 Installing libv8 3 3 10 4 with native extensions Unfortunately a fatal error has occurr
  • 如何在组件ContextMenu中的primeNG中使用属性appendTo?

    我正在尝试使用该属性appendTo在组件中上下文菜单 https www primefaces org primeng contextmenu 但我想将行为附加到一个元素 例如 div 在您想要附加的元素上添加主题标签 myHashTag
  • 查找沿轴不包括零的 numpy 数组的最小值/最大值

    有一种很好的方法可以找到数组中不包括零的非零最小值 最大值here https stackoverflow com questions 7164397 find the min max excluding zeros in a numpy
  • 将表单 POST 与查询字符串组合是否有效?

    例如 我知道在大多数 MVC 框架中 查询字符串参数和表单参数都可供处理代码使用 并且通常合并为一组参数 通常 POST 优先 但是 根据 HTTP 规范 这样做是否有效 假设您要发布到 http 1 2 3 4 MyApplication
  • Powershell:如何测试一行文本是否包含换行符或回车符?

    如何测试文本文件的第一行是否以 r 或 n 终止 我尝试了类似于以下的各种演绎 我不确定导入到 powershell 中的字符串 文件的第一行 是否包含不可见字符 我也尝试使用 StreamReader 方法读取该行 但无济于事 maste
  • 如何导出C#方法?

    我们如何导出 C 方法 我有一个 dll 我想通过 ctypes 模块在 Python 语言中使用它的方法 因为我需要使用 ctypes 模块 所以我需要导出 C 方法 以便它们在 Python 中可见 那么 如何导出 C 方法 就像在 C
  • 更改 gridview 以呈现 head 元素

    我看过一些其他关于如何实现此功能的帖子 但是 它们似乎都不关心您将 GridView 子类化为您自己的自定义服务器控件的情况 我试图设置这些属性以使 GridView 呈现 thead 元素 但我不断收到空引用异常 有接受者吗 这是 Dat
  • CoordinatorLayout 内的水平 RecyclerView

    我是 Android 开发新手 我正在 android lollipop 设备中使用 CoordinatorLayout 问题是 我有一个具有水平滚动的回收器视图 在滚动具有垂直滚动效果的回收器视图时会折叠 如果我不滚动水平回收器视图 如果
  • 最后一个窗口关闭时关闭 SwiftUI 应用程序[重复]

    这个问题在这里已经有答案了 当用户关闭最后一个窗口时 是否可以关闭 macOS SwiftUI 应用程序 类似于applicationShouldTerminateAfterLastWindowClosed应用程序委托函数 func app
  • 通过并发删除维护名称的唯一对象

    我正在使用以下编程习惯 我保持同步 HashMap 具有名称与对象的关联 要查找 对象的名称我使用以下代码 MyObject getObject String name synchronized map MyObject obj map g
  • 如何在 NodeJS 中维护请求会话

    我正在尝试使用NodeJS抓取需要登录的网站POST 然后 一旦我登录 我就可以通过以下方式访问单独的网页GET 现在的第一个问题是登录 我尝试过使用request to POST登录信息 但我得到的响应似乎没有登录 exports get
  • 空流,我必须包含 ostream 吗?

    我正在写一个记录器 如果禁用 这是定义 LOG 宏的代码 ifdef NO LOG include
  • iOS/Swift:如何检测 UITextField 上的触摸操作

    我想检测 UITextField 上的触摸操作 似乎 触摸内部 操作不是通过触摸文本字段内部来触发的 似乎没有启用 Touch Up Inside UITextField 但 着陆 有效 所以解决办法如下 斯威夫特 4 x myTextFi
  • 测试可能未设置的变量中的 NULL 值

    考虑到 The isset http es php net isset如果设置了变量且非 NULL 则构造返回 TRUE The 一片空白 http es php net is null如果未设置变量 函数会抛出警告 有没有一种方法可以测试
  • 以编程方式更新[占位符]反应式表单控件

    我有以下内容formControl作为我的反应形式的一部分
  • 单击 SwiftUI 中的 NavigationLink 后隐藏 TabView

    当我有一个TabView 第一个选项卡有一个NavigationView 当我点击Row 我要那个TabView 消失 我怎么做 同样的问题在这里 在 SwiftUI 中使用 NavigationLink 导航时如何隐藏 TabBar ht
  • 在 Javascript 中将输入文本大写

    在表单中 我有两个按钮将文本转换为大写和小写 我正在使用此函数将输入文本转换为大写 document xyz textinput value document xyz textinput value toUpperCase 现在 我想添加一
  • 简单数学表达式的正则表达式

    作为练习 我试图想出一个正则表达式来评估简单的代数 例如 q 23 345 123 65 从这里我想得到 23 345 123 65 现在 我搜索了类似的问题 其他人已经解决了这个问题 但我真正想知道的是为什么my解决方案不起作用 这是我得