python py解析单词excludeChars

2024-06-26 02:14:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试为一个可以包含''uu'的数字创建一个解析器。我希望输出中的下划线被抑制。例如,一个有效的单词应该是1000_000,它应该返回一个数字:1000000。 我尝试过excludeChars关键字参数,因为我的理解是,这应该做到以下几点:

"If supplied, this argument specifies characters not to be considered to match, even if those characters are otherwise considered to match."

摘自http://infohost.nmt.edu/tcc/help/pubs/pyparsing/pyparsing.pdf-第33页第5.35节(伟大的pyparsing参考btw)

下面是我的尝试:

import pyparsing as pp
num = pp.Word(pp.nums+'_', excludeChars='_')
num.parseString('123_4')

但结果是“123”而不是“1234”

^{pr2}$

有什么建议吗?在


Tags: to解析器参数ifmatch数字关键字pyparsing
2条回答

你误解了排他性的目的。它不是为了抑制输出中的那些字符,而是作为对初始字符串和正文字符串中给定字符的重写。所以这个

Word(nums+'_', excludeChars='_')

就和

^{pr2}$

添加excludeChars是因为有很多次用户想要定义像:

  • 除“:”之外的所有可打印文件
  • 除“,”或“.”之外的所有可打印文件
  • 除。。。在

在添加excludeChars之前,唯一的方法就是外观笨拙:

^{3}$

或者

Word(printables.replace(',',''))

你现在可以写了

Word(printables, excludeChars=',.')

在您的例子中,您希望解析数值,允许嵌入''u’s,但只返回数字。这是一个分析操作的好例子:

integer = Word(nums+'_').setParseAction(lambda t: t[0].replace('_',''))

解析操作在解析时被调用来进行过滤和转换。甚至可以将转换包含在操作中:

integer = Word(nums+'_').setParseAction(lambda t: int(t[0].replace('_','')))
integer.parseString('1_000')   >  [1000]

简单地替换下划线字符怎么样?在

"123_4".replace("_", "")
# "1234"

相关问题 更多 >