可以使用单个正则表达式来解析函数参数吗?

2024-01-07

Problem

有一个程序文件,在文件中的某个位置包含以下代码片段。

...

food($apples$ , $oranges$ , $pears$ , $tomato$){
  ...
}

...

该函数可以包含任意数量的参数,但它们必须是用逗号分隔的字符串。所有参数字符串都是小写单词。

我希望能够使用正则表达式解析每个参数。例如,Python 中的结果列表如下:

["apples", "oranges", "pears", "tomato"]

尝试的解决方案

使用 python RE 模块,我能够通过将问题分成两部分来实现这一目标。

  1. 找到代码中的函数并提取参数列表。

    plist = re.search(r'food\((.*)\)', programString).group(1)
    
  2. 使用另一个正则表达式拆分列表。

    params = re.findall(r'[a-z]+', plist)
    

Question

无论如何,我可以用一个正则表达式而不是两个正则表达式来实现这一目标吗?

Edit

感谢 Tim Pietzcker 的回答,我找到了一些相关问题:

  1. Python 正则表达式 - 如何从通配符表达式中捕获多个组? https://stackoverflow.com/questions/464736/python-regular-expressions-how-to-capture-multiple-groups-from-a-wildcard-expre
  2. 哪些正则表达式风格支持捕获(而不是捕获组)? https://stackoverflow.com/questions/2652554/which-regex-flavors-support-captures-as-opposed-to-capturing-groups

回答你的问题“可以在单个正则表达式中完成吗?”:可以,但不能在Python中完成。

如果您想仅使用单个正则表达式来匹配和捕获(单独)未知数量的匹配项,如您的示例所示,那么您需要支持捕获(而不是捕获组)的正则表达式引擎 https://stackoverflow.com/questions/2652554/which-regex-flavors-support-captures-as-opposed-to-capturing-groups。目前只有 .NET 和 Perl 6 可以做到这一点。

所以在Python中,你要么需要分两步完成(find整个food(...)函数调用,然后findall按照 Dingo 的建议,与第二个正则表达式进行单独匹配)。

或者使用像 Paul McGuire 这样的解析器pyparsing.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

可以使用单个正则表达式来解析函数参数吗? 的相关文章

随机推荐

  • Nokogiri 不允许我在 Rails 中捆绑安装

    我已经看到有人提出这个问题 并尝试了我所看到的建议 我买了一台新 MacBook 希望设置一个现有的应用程序 当我克隆应用程序时 它不会捆绑安装 并且表现得像未安装 Rails 即使它在其他目录中工作 我尝试从 gemfile 中删除版本号
  • 使用表单身份验证的 MVC3 中的简单授权

    我正在尝试做 MVC3 中应该很简单的事情 我有一个使用表单身份验证通过第三方 SSO 对用户进行身份验证的应用程序 成功登录后 SSO 会发回我的应用程序上的特定控制器操作 然后我打电话FormsAuthentication SetAut
  • query.startAt 数据库规则权限被拒绝

    似乎是query startAt规则被破坏了 或者我不明白 有人可以确认吗 这是最小的可重现误差 实例 https querystartaterror firebaseapp com 使用 CTRL SHIFT i 打开 Chrome 控制
  • 使用 NewtonSoft 将 JSON 对象反序列化为 .Net 对象

    我有一个 json 对象 我想将其反序列化为其 Net 类型而不进行强制转换 我想我在文档中的某个地方读到 您可以将属性传递到 json 中 以告诉反序列化器它可以尝试转换的 Net 对象类型 我找不到我读这篇文章的地方 我想避免使用 va
  • 一些字符坚持我在 Python cmd 中的彩色提示

    我在用Python 2的cmd模块 https docs python org 2 library cmd html为程序创建命令行 只要我不为提示添加颜色 一切都会很好地工作 工作代码 from cmd import Cmd class
  • Woocommerce 德国化将条款和条件复选框移至提交前

    我正在尝试将 WC 结帐中的复选框从付款信息之前移动到提交按钮之前 我已使用以下命令在提交按钮之前成功添加了另一组复选框 add action woocommerce review order before submit woocommer
  • gmaps4rails:未捕获的引用错误:Gmaps 未定义

    我想通过 Gmaps Rails gem 将地图包含到我的 Rails 应用程序中 我使用带有资产管道的 Rails 3 2 11 按照此 gem 的设置说明进行操作https github com apneadiving https gi
  • 实体框架 - 无法创建 x 类型的常量值。此上下文中仅支持原始类型。

    我有以下内容 工程师模型 public class engineers public Guid Guid get set public string Name get set 我用正确的详细信息填写了工程师列表 List
  • 防止Button继承Parent的BackColor

    当我有一个父控件时BackColor以外SystemColors Control 但我在父控件上有按钮 我想在系统中绘制它们 但是 当我不改变BackColor按钮的颜色以父级的颜色绘制 当我改变BackColor按钮的SystemColo
  • 将 MySQL innodb 数据库加载到内存中

    我有一个 1 9GB 的 MySQL innodb 数据库 通过以下命令显示 SELECT table schema Data Base Name sum data length index length 1 048 576 as Data
  • 对 ignite 端口的 DoS 攻击

    我使用的ignite是嵌入式的 ignite使用两个端口 当我测试端口的dos攻击时 ignite出现java lang OutOfMemoryError Direct buffer memory 2021 12 01 14 12 59 0
  • malloc 错误 C++ [重复]

    这个问题在这里已经有答案了 可能的重复 malloc c 3074 错误 https stackoverflow com questions 1097995 malloc c3074 error 我在执行 C 代码时遇到这个奇怪的错误 ma
  • 具有嵌套命名空间的 Rails 4 引擎

    我找不到一种方法来生成在 Rails 下具有嵌套命名空间的引擎 每次这样做时 我基本上都必须手动编辑和移动生成的文件 Rails 中真的不支持嵌套命名空间吗 似乎不太可能 在公司 我们对所有内容进行命名 如下所示 公司名称 服务名称 模块
  • 在 Sass 中为数字添加单位

    我正在尝试创造动态价值 但到目前为止都失败了 创建的像素值似乎失去了用于计算的能力 numericValue 30 pixelValue numericValue px also tried pixelValue numericValue
  • 链接具有公共静态库的静态库的正确过程是什么?

    我正在开发一个静态库 名为Silicon https github com reidmain Silicon 我用于所有 iOS 应用程序 因为我不想创建一个可能难以维护的大型静态库 所以我创建了许多较小的静态库 并将它们作为子模块附加 截
  • UINavigationController 的 addChildViewController 和 topViewController 之间的相互作用

    我有类似模态视图控制器的东西 我需要将其显示在其他视图控制器上方 我没有使用常规模态控制器功能 presentViewController 和朋友 因为我需要更好地控制这个过程 相反 我使用视图控制器包含功能 addChildViewCon
  • 检测 iPhone 屏幕上的亮点/暗点

    我想检测并标记图像上最亮和最暗的点 例如 我正在创建 AVCaptureSession 并使用 AVCaptureVideoPreviewLayer 在屏幕上显示视频帧 现在 在这个相机输出视图上 我希望能够标记当前最暗和最亮的点 我必须读
  • IE框架边框替代

    对于这行代码 我收到此错误 validator w3 org XHTML 1 0 Transitional there is no attribute frameBorder 我在用着frameBorder因为 IE8 在 iframe 上
  • 有人使用 Android NDK 构建过 ZBar 吗?

    我正在尝试将 ZBar 集成到我的 Android 应用程序中 但无法构建本机库 我想知道是否有人以前做过并愿意与我分享 我知道这个问题很老了 但是 ZBar 提供了 android SDK http sourceforge net pro
  • 可以使用单个正则表达式来解析函数参数吗?

    Problem 有一个程序文件 在文件中的某个位置包含以下代码片段 food apples oranges pears tomato 该函数可以包含任意数量的参数 但它们必须是用逗号分隔的字符串 所有参数字符串都是小写单词 我希望能够使用正