在 pyparsing 中进行简单解析时遇到问题

2024-01-03

我在使用 pyparsing 时遇到一些基本问题。下面是测试程序和运行的输出。

aaron-mac:sql aaron$ more s.py

from pyparsing import *

n = Word(alphanums)
a = Group( n | Group( n + OneOrMore( Suppress(",") + n )))
p = Group( a + Suppress(".") )
print a.parseString("first")
print a.parseString("first,second")
print p.parseString("first.")
print p.parseString("first,second.")


aaron-mac:sql aaron$ python s.py
[['first']]
[['first']]
[[['first']]]
Traceback (most recent call last):
 File "s.py", line 15, in <module>
   print p.parseString("first,second.")
 File "/Library/Python/2.6/site-packages/pyparsing.py", line 1032, in parseString
   raise exc
pyparsing.ParseException: Expected "." (at char 5), (line:1, col:6)
aaron-mac:sql aaron$ 

如何修改测试程序中的语法以解析以句点结尾的逗号分隔名称列表?我查看了文档并尝试找到实时支持列表,但认为我最有可能在这里得到回复。


'|'运算符创建一个 MatchFirst 表达式,在其中评估替代项,直到出现第一个匹配项。

Pyparsing 纯粹从左到右工作,尽可能将解析器表达式应用于输入字符串。 pyparsing 所做的唯一前瞻是您写入解析器的任何内容。

在这个表达式中:

a = Group( n | Group( n + OneOrMore( Suppress(",") + n )))

比方说n只是一个字面的“X”。如果这个解析器被给予输入字符串“X”,它显然会匹配前导的、单独的字符串。n表达。如果给定字符串“X,X,X”,它仍然只匹配前导n,因为这是解析器中的第一个选择。

如果将表达式翻转为:

a = Group( Group( n + OneOrMore( Suppress(",") + n )) | n)

然后要解析“X”,它首先尝试匹配列表,这将失败,然后匹配单独的n。要解析“X,X,X”,第一个替代方案将是列表表达式,它将匹配。

如果您想要匹配最长的替代项,请使用“^”运算符,它给出 Or 表达式。或者将评估所有给定的替代方案,然后选择最长的匹配。

a = Group( n ^ Group( n + OneOrMore( Suppress(",") + n )))

您还可以使用 pyparsing 辅助方法来简化此操作delimitedList。解析由逗号分隔的相同表达式的列表是一种常见的情况,因此人们不得不重新发明而不是看到expr + ZeroOrMore(Suppress(",") + expr)一遍又一遍,我补充道delimitedList作为标准的 pyparsing 助手。delimitedList("X")将匹配“X”和“X,X,X”。

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

在 pyparsing 中进行简单解析时遇到问题 的相关文章

随机推荐

  • ElasticSearch 分组并分发到存储桶

    我对 elasticsearch 很陌生 但似乎没有简单的方法来创建聚合并将 doc count 分配到存储桶中 一旦先前的聚合完成 例如 我有以下数据集 我想创建 4 个存储桶和组配置文件 这些配置文件在存储桶之间具有特定数量的事务 配置
  • 图片 - 上传没有响应,无法访问 $_FILES

    这是我的文件上传脚本 我收到以下错误 Notice Undefined index fupload in C Users Tuskar Desktop Projekt htdocs Project IT Space Profile edit
  • 原生安装 PySpark 也支持 S3 访问

    我想从 PySpark 读取存储在 S3 上的 Parquet 数据 我从这里下载了 Spark http www apache org dist spark spark 2 1 0 spark 2 1 0 bin hadoop2 7 tg
  • 在 Android 中完成(或访问)特定 Activity

    当用户打开 Activity 时 它们会堆积在视图堆栈上 当用户以任何方式完成一个 Activity 时 它就会从视图堆栈中弹出 现在 我遇到一种情况 用户打开了应用程序的主屏幕 并在主屏幕顶部连续打开了多个活动 在每个活动中 都有一个控件
  • 如何向 OSX launchd plist 添加参数以将输出通过管道传输到日志文件?

    我已经尝试了许多不同的变体 但就是无法让它发挥作用 我有一个 plist 文件
  • 在Python中从csv创建kml

    我是Python新手 我正在处理 GPS 文件 我需要将包含所有 GPS 数据的 CSV 文件转换为 kml 文件 下面是我正在使用的 python 代码 import csv Input the file name fname raw i
  • 使用 CUDA 感知 MPI 的要求

    我想通过 CUDA 感知 MPI 在不同 CUDA 设备之间交换数据 如中所述本文 http devblogs nvidia com parallelforall introduction cuda aware mpi 据我了解 以下代码应
  • 一次删除 40k+ 行的更快方法

    有没有更快的方法来删除行 我只需要删除从第 3 行到最后一行有数据的奇数行 下面的代码可以工作 但速度很慢 Dim toDelete As Range For icount endRow To 3 Step 2 If toDelete Is
  • 如何在 Python 中解析文件列表以仅获取文件名?

    假设我正在使用 Pythonftplib http www python org doc 2 5 2 lib module ftplib html从 FTP 服务器检索日志文件列表 我将如何解析该文件列表以仅获取列表中的文件名 最后一列 请
  • 从 Flutter 请求 ASP.Net Core 3.0 的错误请求 400

    我正在尝试连接 Flutter 的 HttpClient 以从在 ASP Net Core 3 0 上运行的本地服务器获取数据 问题是我每次尝试时都会收到错误 400 错误请求 这是颤振代码 String token await Share
  • 在 JSFiddle 中加载 Facebook API

    我希望能够在 JSFiddle 中加载 Facebook API 这是我的目前的尝试 https jsfiddle net casebash j26bq6qf 11 当我跑步时 window fbAsyncInit function FB
  • 验证查询中的所有位置是否都进行了特定的联接

    我必须以存储过程的形式执行数百个查询 并验证每个连接是否满足以下条件 始终在连接中进行特定的列连接 连接不以硬编码格式存在于该列的前一个唯一值 即它需要类似于 a requiredJoinColumn b requiredJoinColum
  • 如何防止JTable按Tab时返回第一行?

    当在表的最后一个单元格中按 Tab 键时 如何禁用 JTable 返回第一行的默认行为 相反 当前单元格应该保持其焦点 简短的答案 找到绑定到选项卡的操作 将其包装到自定义操作中 仅当不在最后一个单元格中时才委托给原始操作 并将原始操作替换
  • CalendarView 需要花费很多时间来显示

    我正在开发 CalendarView 上的应用程序 我必须以小的线性布局显示calendarView 显示包含小线性布局中的 calendarView 的整个页面时会出现问题 gt 这需要 10 秒才能显示 而且时间太长了 布局中没有其他东
  • 在 C# 中从文本文件读取随机行到文本框[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在开发这个程序 它的功能之一是有一个部分 程序自动从文本文件中随机选择一行 它包含的内容并不重要 并将其显示在文本框中 我花了很多
  • Echonest API 迁移问题

    我当前使用 Echonest API 在 ID 空间之间进行转换 MusicBrainz gt SeatGeek 随着 Spotify API 即将迁移 我想知道 Project Rosetta 是否会有任何端点 这是我的应用程序的一个非常
  • 如何使用 sweet Alert 2 执行 Rails 命令?

    我有以下内容sweet alert 2信息
  • SQL Server 2005 排序规则问题

    我有两个表 它们使用不同的排序规则 不允许连接具有不同排序规则的表中的列 例如不允许使用以下 SQL select table1column1 table2column2 from 我的问题是 如何在不破坏表数据的情况下更改表的排序规则 提
  • 如何获取 .MSG 文件的 MIME 类型?

    我已经尝试过这些方法来查找文件的 MIME 类型 Path source Paths get C Users akash Desktop FW Internal release of MSTClient Server5 02 04 24 m
  • 在 pyparsing 中进行简单解析时遇到问题

    我在使用 pyparsing 时遇到一些基本问题 下面是测试程序和运行的输出 aaron mac sql aaron more s py from pyparsing import n Word alphanums a Group n Gr