如何在python中将文本格式与字符串匹配而不使用正则表达式?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何在python中将文本格式与字符串匹配而不使用正则表达式?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2049字,纯文字阅读大概需要3分钟。
内容图文
![如何在python中将文本格式与字符串匹配而不使用正则表达式?](/upload/InfoBanner/zyjiaocheng/801/0d0c5f4b501749f99d420185d586b800.jpg)
我正在阅读一个文件,其中包含以下形式的行
[ 0 ] L= 9 (D) R= 14 (D) p= 0.0347222 e= 10 n= 34
我看到Matlab code读取了这个文件
[I,L,Ls,R,Rs,p,e,n] = textread(f1,'[ %u ] L= %u%s R= %u%s p= %n e=%u n=%u')
我想用Python读取这个文件.我唯一知道的是正则表达式,甚至阅读这一行的一部分也会产生类似的结果
re.compile('\s*\[\s*(?P<id>\d+)\s*\]\s*L\s*=\s*(?P<Lint>\d+)\s*\((?P<Ltype>[DG])\)\s*R\s*=\s*(?P<Rint>\d+)\s*')
哪个很难看!在Python中有更简单的方法吗?
解决方法:
Pyparsing是不可读和脆弱的正则表达式处理器的后备.下面的解析器示例处理您声明的格式,以及任何类型的额外空格和赋值表达式的任意顺序.就像在正则表达式中使用命名组一样,pyparsing支持结果名称,因此您可以使用dict或属性语法(data [‘Lint’]或data.Lint)访问已解析的数据.
from pyparsing import Suppress, Word, nums, oneOf, Regex, ZeroOrMore, Optional
# define basic punctuation
EQ,LPAR,RPAR,LBRACK,RBRACK = map(Suppress,"=()[]")
# numeric values
integer = Word(nums).setParseAction(lambda t : int(t[0]))
real = Regex(r"[+-]?\d+\.\d*").setParseAction(lambda t : float(t[0]))
# id and assignment fields
idRef = LBRACK + integer("id") + RBRACK
typesep = LPAR + oneOf("D G") + RPAR
lExpr = 'L' + EQ + integer("Lint")
rExpr = 'R' + EQ + integer("Rint")
pExpr = 'p' + EQ + real("pFloat")
eExpr = 'e' + EQ + integer("Eint")
nExpr = 'n' + EQ + integer("Nint")
# accept assignments in any order, with or without leading (D) or (G)
assignment = lExpr | rExpr | pExpr | eExpr | nExpr
line = idRef + lExpr + ZeroOrMore(Optional(typesep) + assignment)
# test the parser
text = "[ 0 ] L= 9 (D) R= 14 (D) p= 0.0347222 e= 10 n= 34"
data = line.parseString(text)
print data.dump()
# prints
# [0, 'L', 9, 'D', 'R', 14, 'D', 'p', 0.034722200000000002, 'e', 10, 'n', 34]
# - Eint: 10
# - Lint: 9
# - Nint: 34
# - Rint: 14
# - id: 0
# - pFloat: 0.0347222
此外,解析操作在分析时执行string-> int或string-> float转换,以便之后值已经是可用的形式. (pyparsing的思想是,在解析这些表达式时,你知道一个由数字组成的单词 – 或者Word(nums) – 将安全地转换为int,那么为什么不立即进行转换,而不仅仅是回来匹配字符串并且必须重新处理字符串序列,试图检测哪些是整数,浮点数等?)
内容总结
以上是互联网集市为您收集整理的如何在python中将文本格式与字符串匹配而不使用正则表达式?全部内容,希望文章能够帮你解决如何在python中将文本格式与字符串匹配而不使用正则表达式?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。