python pyparsing单词excludeChars
我正在尝试为一个可以包含“\u1”的数字创建一个解析器。我希望在输出中抑制下划线。例如,一个有效单词应该是1000_000,它应该返回一个数字:1000000。 我已经为此尝试了excludeChars关键字参数,因为我的理解是,这应该执行以下操作: 如果提供,此参数指定不被视为匹配的字符,即使这些字符在其他情况下被视为匹配 摘自第33页第5.35节(参考btw) 以下是我的尝试:python pyparsing单词excludeChars,python,pyparsing,Python,Pyparsing,我正在尝试为一个可以包含“\u1”的数字创建一个解析器。我希望在输出中抑制下划线。例如,一个有效单词应该是1000_000,它应该返回一个数字:1000000。 我已经为此尝试了excludeChars关键字参数,因为我的理解是,这应该执行以下操作: 如果提供,此参数指定不被视为匹配的字符,即使这些字符在其他情况下被视为匹配 摘自第33页第5.35节(参考btw) 以下是我的尝试: import pyparsing as pp num = pp.Word(pp.nums+'_', exclude
import pyparsing as pp
num = pp.Word(pp.nums+'_', excludeChars='_')
num.parseString('123_4')
但结果是“123”而不是“1234”
In [113]: num.parseString('123_4')
Out[113]: (['123'], {})
有什么建议吗?简单地替换下划线字符怎么样
"123_4".replace("_", "")
# "1234"
你误解了排外的目的。它不是用来抑制输出中的那些字符,而是作为对初始字符串和正文字符串中给定字符的重写。那么这个
Word(nums+'_', excludeChars='_')
就跟
Word(nums)
添加excludeChars是因为用户多次希望定义以下词语:
- 除“:”之外的所有可打印内容
- 除“,”或“.”之外的所有可打印内容
- 除…之外的所有可打印内容
Word(''.join(c for c in printables if c != ':'))
或
你现在可以写了
Word(printables, excludeChars=',.')
在您的例子中,您希望解析数值,允许嵌入'\u',但只返回数值。这对于解析操作来说是一个很好的例子:
integer = Word(nums+'_').setParseAction(lambda t: t[0].replace('_',''))
integer = Word(nums+'_').setParseAction(lambda t: int(t[0].replace('_','')))
integer.parseString('1_000') --> [1000]
解析操作在解析时被调用以进行过滤和转换。您甚至可以将转换为int作为解析操作的一部分:
integer = Word(nums+'_').setParseAction(lambda t: t[0].replace('_',''))
integer = Word(nums+'_').setParseAction(lambda t: int(t[0].replace('_','')))
integer.parseString('1_000') --> [1000]
这是一个很好的建议,特别是基于我给出的人为示例,但是这个解析器是更复杂的解析器的一部分。嗯,你的建议可能仍然可以利用。如果我这里没有直接的答案,我会把你的答案记下来。