我有一个像下面这样的字符串:
date Not Important value NotImportant2
11.11.13 useless . useless,21 useless 2 14.21 asmdakldm
21.12.12 fmpaosmfpoamsp 4 41 ajfa9si90
我只需要提取日期和末尾的值。在
如果我使用标准过程匹配多个单词,pyparsing会将最后一个“Not Important”列作为“value”进行匹配。在
^{pr2}$我认为最好的方法是强制pyparsing至少匹配2个空格,但我真的不知道如何匹配。有什么建议吗?在
说明
要匹配2个或更多空格,可以使用
\s{2,}
此表达式将:
^(\d{2}\.\d{2}\.\d{2})[^\r\n]*\s(\S+)\s{2,}\S+\s*(?:[\r\n]|\Z)
示例
Live Demo
示例文本
匹配
^{pr2}$这个示例文本是列式的,所以pyparsing在这里有点过分了。 你可以写下:
然后得到:
^{pr2}$但是,由于您特别需要pyparsing解决方案,那么对于如此具有专栏性的东西,您可以使用
^{3}$GoToColumn
类:GoToColumn
与SkipTo
相似,但它不是前进到表达式的下一个实例,而是前进到特定的列号(其中列号是从1开始的,而不是像字符串切片那样从0开始的)。在下面是应用于示例文本的解析器:
印刷品:
请注意,这些值已经从string转换为int或float类型;您可以为自己编写一个解析操作,将
dd.mm.yy
日期转换为Python日期时间。还要注意关联的结果名称是如何定义的;这些名称允许您按名称访问各个字段,如print result.date
。在我还注意到您的假设,即要获得一个或多个元素的序列,您使用了以下构造:
虽然这样做是可行的,但它会创建一个运行时代价高昂的递归表达式。pyparsing提供了一个迭代等价物
OneOrMore
:或者,如果您喜欢较新的“*”运算符形式:
^{8}$请扫描pyparsing API文档,这些文档包含在pyparsing的源代码发行版中,或者在线访问http://packages.python.org/pyparsing/。在
欢迎使用Pyparsing!在
相关问题 更多 >
编程相关推荐