我有一个数据集,它可以重新读取以下内容:
Capture MICR - Serial: Pos44: Trrt: 32904 Acct: Tc: 2064 Opt4: Split:
我遇到的问题是我不知道如何正确地为“capture MICR-Serial Field”编写一个捕获。这个字段可以是空白的,也可以包含长度可变的字母数字(我对其他可以填充或空白的字段也有相同的问题)。在
我试过以下几种变体,但仍有不足之处。在
pp.Literal("Capture MICR - Serial:") + pp.White(" ", min=1, max=0) + (pp.Word(pp.printables) ^ pp.White(" ", min=1, max=0))("crd_micr_serial") + pp.FollowedBy(pp.Literal("Pos44:"))
我认为问题的一部分是Or
匹配最长匹配的解析,在本例中,最长匹配可能是一个长空格字符,只有一个字母数字,但我仍然希望捕获单个值。在
谢谢大家的帮助。在
像“A:valueA B:valueB C:valueC”这样解析文本的最简单方法是使用pyparsing的SkipTo类:
我想再加强一下:
添加一个解析操作来去除前导空格和尾随空格
添加一个results名称,以便在解析行之后轻松获得结果
下面是简单解析器的外观:
^{pr2}$给出:
我尽量避免在可能的情况下复制/粘贴代码,而宁愿自动化“A后面跟着B”和 “C后面是行尾”和一个描述不同提示字符串的列表,然后遍历该列表以构建每个字符串 子表达式:
给出:
这是你想要的吗?在
我使用
Combine
只是为了让Or
的两臂都能产生类似的结果,也就是说,在结果字符串的末尾有“Pos44:”,在那里可以将其拔出。我不喜欢使用正则表达式。在相关问题 更多 >
编程相关推荐